JUnit 簡介
JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立的一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,因?yàn)槌绦騿T知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。
單元測試規(guī)范
單元測試類后面加Test;
測試方法使用@Test標(biāo)注;
測試方法名之前加test;
每個測試方法之間相互獨(dú)立;
所有測試方法返回類型必須為void且無參數(shù)(這條必須遵守,不然運(yùn)行測試要報錯)
JUnit4常用注解
| 注解 | 注解位置 | 功能 |
|---|---|---|
| @Test | 方法 | 有兩個屬性:1.excepted屬性是用來測試異常; 2.timeout用來測試性能的,就是測試一個方法能不能在規(guī)定時間內(nèi)完成; |
| @Rule | 成員變量,方法(都必須是共有非靜態(tài)) | Rule是JUnit4中的新特性,它讓我們可以擴(kuò)展JUnit的功能,靈活地改變測試方法的行為。JUnit中用@Rule和@ClassRule兩個注解來實(shí)現(xiàn)Rule擴(kuò)展,這兩個注解需要放在實(shí)現(xiàn)了TestRule借口的成員變量(@Rule)或者靜態(tài)變量(@ClassRule)上。@Rule和@ClassRule的不同點(diǎn)是,@Rule是方法級別的,每個測試方法執(zhí)行時都會調(diào)用被注解的Rule,而@ClassRule是類級別的,在執(zhí)行一個測試類的時候只會調(diào)用一次被注解的Rule??梢栽O(shè)置單個或多個規(guī)則,比如Timeout,RuleChain等 |
| @Before | 方法 | 每個測試方法執(zhí)行前自動調(diào)用一次 |
| @After | 方法 | 每一個測試方法執(zhí)行完自動調(diào)用一次 |
| @BeforeClass | 方法 | 所有測試方法執(zhí)行前執(zhí)行一次,在測試類還沒有實(shí)例化就已經(jīng)被加載,所以用static修飾 |
| @AfterClass | 方法 | 所有測試方法執(zhí)行完執(zhí)行一次,在測試類還沒有實(shí)例化就已經(jīng)被加載,所以用static修飾; |
| @Ignore | 方法,類 | 不執(zhí)行某個測試類或者測試方法 |
- 測試@BeforeClass等執(zhí)行順序
public class AnnotationTest {
public AnnotationTest(){
System.out.println("構(gòu)造方法");
}
?
@BeforeClass
public static void setUpBeforeClass(){
System.out.println("BeforeClass");
}
?
@AfterClass
public static void tearDownAfterClass(){
System.out.println("AfterClass");
}
?
@Before
public void setUp(){
System.out.println("Before");
}
?
@After
public void tearDown(){
System.out.println("After");
}
?
@Test
public void test1(){
System.out.println("Test1");
}
?
@Test
public void test2(){
System.out.println("Test2");
}
?
@Ignore
public void test3(){
System.out.println("Test3");
}
}
輸出:
BeforeClass
構(gòu)造方法
Before
Test1
After
構(gòu)造方法
Before
Test2
After
AfterClass
- Timeout測試(超時直接拋出異常)
public class Example1 {
@Rule()
public Timeout t = new Timeout(100, TimeUnit.MILLISECONDS);
?
@Test
public void t1() throws Exception
{
Thread.sleep(200);
assertEquals(1, 2);
}
}
常用斷言方法
| 斷言方法 | 作用 |
|---|---|
| assertTrue | 檢查條件是否為真 |
| assertFalse | 檢查條件是否為假 |
| fail | 在沒有報告的情況下使測試不通過 |
| assertEquals | 檢查相等 |
| assertNotEquals | 檢查不等 |
| assertArrayEquals | 檢查Array是否相等 |
| assertNotNull | 檢查是否非空 |
| assertNull | 檢查是否為空 |
| assertSame | 檢查對象引用是否相等 |
| assertNotSame | 檢查對象引用是否不等 |
| assertThat | 檢查對象是否符合匹配器匹配的條件。org.hamcrest.CoreMatchers中有很多斷言方法,比如any,not,equalTo等 |
創(chuàng)建測試套件
套件測試類,讓這些類按注解的順序執(zhí)行,而不是單獨(dú)運(yùn)行每個測試。
@RunWith(Suite.class)
@Suite.SuiteClasses({ PrepareMyBagTest.class, AddPencilsTest.class })
public class SuitTest {
}