賽程
來自維基百科 :
測試夾具用於一致地測試某些專案,裝置或軟體。
它還可以通過從測試方法本身中提取常見的初始化/完成程式碼來增強測試的可讀性。
在常規初始化可以執行一次而不是在每次測試之前,這也可以減少執行測試所花費的時間。
以下示例旨在顯示 JUnit 提供的主要選項。假設類 Foo
初始化很昂貴:
public class Foo {
public Foo() {
// expensive initialization
}
public void cleanUp() {
// cleans up resources
}
}
另一類 Bar
引用了 Foo
:
public class Bar {
private Foo foo;
public Bar(Foo foo) {
this.foo = foo;
}
public void cleanUp() {
// cleans up resources
}
}
下面的測試需要一個包含單個 Bar
的 List 的初始上下文。
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.List;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class FixturesTest {
private static Foo referenceFoo;
private List<Bar> testContext;
@BeforeClass
public static void setupOnce() {
// Called once before any tests have run
referenceFoo = new Foo();
}
@Before
public void setup() {
// Called before each test is run
testContext = Arrays.asList(new Bar(referenceFoo));
}
@Test
public void testSingle() {
assertEquals("Wrong test context size", 1, testContext.size());
Bar baz = testContext.get(0);
assertEquals(referenceFoo, baz.getFoo());
}
@Test
public void testMultiple() {
testContext.add(new Bar(referenceFoo));
assertEquals("Wrong test context size", 2, testContext.size());
for (Bar baz : testContext) {
assertEquals(referenceFoo, baz.getFoo());
}
}
@After
public void tearDown() {
// Called after each test is run
for (Bar baz : testContext) {
baz.cleanUp();
}
}
@AfterClass
public void tearDownOnce() {
// Called once after all tests have run
referenceFoo.cleanUp();
}
}
在示例中,@BeforeClass
註釋方法 setupOnce()
用於建立 Foo
物件,初始化起來很昂貴。重要的是它不能被任何測試修改,否則測試執行的結果可能取決於各個測試的執行順序。這個想法是每個測試都是獨立的,並測試一個小功能。
@Before
註釋方法 setup()
設定測試上下文。在測試執行期間可以修改上下文,這就是為什麼必須在每次測試之前初始化它。通過在每個測試方法的開頭包含此方法中包含的程式碼,可以實現等效的效果。
@After
註釋方法 tearDown()
清理測試環境中的資源。它在每次測試呼叫後呼叫,因此通常用於釋放在 @Before
註釋方法中分配的資源。
所有測試執行後,@AfterClass
註釋方法 tearDownOnce()
清理資源。這些方法通常用於釋放在初始化期間或在註釋方法中分配的資源。也就是說,最好避免在單元測試中使用外部資源,這樣測試就不依賴於測試類之外的任何東西。