Junit的所有測(cè)試方法都是以@Test修飾,以public void 開(kāi)頭。如下:
@Test
public void testAdd() {
assertEquals(0, new Calculate().add(0, 1));
}
@BeforeClass && @AfterClass 都是只會(huì)執(zhí)行一次,@BeforeClass是在類加載的時(shí)候執(zhí)行,@AfterClass 是整個(gè)類結(jié)束的時(shí)候被執(zhí)行,整個(gè)方法是一個(gè)靜態(tài)方法。
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("before class");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("after class");
}
@Before && @After兩個(gè)方法是在每個(gè)測(cè)試方法執(zhí)行的執(zhí)行都會(huì)被執(zhí)行,@Before是在方法執(zhí)行前執(zhí)行,@After是在方法執(zhí)行結(jié)束后執(zhí)行。
@Before
public void setUp() throws Exception {
System.out.println("before");
}
@After
public void tearDown() throws Exception {
System.out.println("after");
}
@Ignore 所修飾的測(cè)試方法會(huì)被測(cè)試運(yùn)行器忽略,例如以下的test1方法會(huì)被測(cè)試運(yùn)行器忽略執(zhí)行。
@Ignore
@Test
public void test1() {
System.out.println("test1");
}
@Test(timeout=毫秒),用來(lái)指定時(shí)間上限,如果這個(gè)測(cè)試方法的執(zhí)行時(shí)間超過(guò)了這個(gè)時(shí)間值則測(cè)試失敗。
// 會(huì)執(zhí)行失敗,因?yàn)閟leep的時(shí)間長(zhǎng)于設(shè)定的timeout時(shí)間
@Test(timeout=1000)
public void test() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Test(expected=異常類),用expected來(lái)指定應(yīng)該拋出的異常,如果在執(zhí)行過(guò)程中沒(méi)有拋出異;蛘邟伋龅漠惓2皇侵付ǖ漠惓,則測(cè)試失敗。
// 這個(gè)測(cè)試案例會(huì)執(zhí)行成功,因?yàn)橹付ǖ漠惓J浅绦蛞獟伋龅漠惓?br />
@Test(expected=IndexOutOfBoundsException.class)
public void outOfBounds()
{
new ArrayList<Object>().get(1);
}
測(cè)試套件是組織所要測(cè)試的類一起運(yùn)行,如果單個(gè)類單獨(dú)的運(yùn)行是比較麻煩的,可以使用測(cè)試套件一起運(yùn)行這些測(cè)試類。需要注意的是:
測(cè)試套件的類是不包含其他任何方法
同時(shí)要更改測(cè)試運(yùn)行器為Suite.class
將要測(cè)試的類作為數(shù)組傳入到SuiteClasses({})中
// 更改測(cè)試運(yùn)行器以及將要測(cè)試的類放入SuiteClasses中
@RunWith(Suite.class)
@SuiteClasses({ AppTest.class, CalculateTest.class, JunitFlowTest.class })
public class AllTests {
// 沒(méi)有測(cè)試方法
}