JUnit
JUnit注解詳解
@Test
在方法前加上@Test,定義為一個測試方法
測試方法必須是 public void 即公共,無返回值的,可拋出異常
@Test
public void add() {
example test = new example();
assertEquals(5,test.add(1,4));
}
@Ignore
暫時不運行某些測試方法/測試類,在測試方法前加上@Ignore注解,JUnit會統計Ignore次數
@Ignore
@Test
public void add() {
example test = new example();
assertEquals(5,test.add(1,4));
}
@BeforeClass
在運行幾個測試方法時,可能需要在數據准備或其他准備中執行一些相同命令,此時為了代碼更加清晰,更少冗余,可以將公用部分提取出來放在一個方法中,並注解@BeforeClass,在所有測試方法運行前先運行一次這個方法,例如創建數據庫,讀取文件等,該方法必須是public static void,即公共靜態且無返回值
@BeforeClass
public static void aaa(){
System.out.println("test begin");
}
@Before
與@BeforeClass區別,@Before會在每個用例運行之前先運行一遍,主要用於一些獨立用例之前的准備工作,比如兩個用例都需要讀取數據庫里用戶A的信息,用例1讀完后刪除A的信息,而用例2讀完后會修改A的信息,此時我們可以在@BeforeClass里建立數據庫連接,在@Before里插入一條用戶A的信息用以測試。
@Before
public void beforeTest(){
System.out.println("test begin");
}
注:與上面的區別是此時根據用例數量輸出了多行test begin
@After
與@Before對應
@RunWith()
概念:測試方法,測試類,測試集,測試運行器
測試方法:用@Test注解的一些方法
測試類:包含一個或多個測試方法的Test.java文件
測試集,是一個suite,包含多個測試類
測試運行器:決定運行方法偏好來運行測試方法/類/集
@RunWith()放在測試類名之前運行,用以確定運行方法,若不標注則會使用默認運行器
常見運行器:
1.@RunWith(Parameterized.class)
參數化運行器,配合@Parameter使用參數化功能
2.@RunWith(Suite.class)
@SuiteClasses({ATest.class,BTest.class,CTest.class})
測試集運行器配合使用測試集功能
3.@RunWith(JUnit4.class)
使用JUnit4默認運行器
4.@RunWith(JUnit38ClassRunner.class)
用於兼容JUnit3.8運行器
5.其他運行器功能
@RunWith(SpringJUnit4ClassRunner.class)
集成了Spring的一些功能
@RunWith(JUnit4.class)
@Parameter
用於使用參數化功能
限時測試
@Test(timeout = 1000)
測試邏輯復雜,嵌套較深的程序時,易出現死循環,故需要加入一些測試限定措施,限時測試規定了一個測試執行時間,若超過了測試規定的執行時間就會被系統強行終止,並且系統會匯報結束的原因為超時。在@Test注解中加入一個參數即可(@Test(timeout=1000)),單位為毫秒
@Test(timeout = 1000)
測試異常
@Test(expected = ArithmeticException.class)
@Test標注加上此參數,當代碼無異常時也會拋出異常
@Test(expected = ArithmeticException.class)
自定義@MyTest注解並實現單元測試
目的
完成自定義注解@MyTest 並實現標有注解的方法並啟動他(模擬@Test注解做單元測試)
步驟
1.新建一個注解類cannotation 命名為MyTest
2.創建一個TestJUnit單元測試類,寫入幾個方法,例如public void test();
3.創建一個MyTestDemo測試類(主功能實現類),該類利用反射機制來實現TestJUnit單元測試類中加@MyTest注解方法的啟動
4.給予注解類生命周期與反射機制吻合,也就是定義注解可以保留到運行時,通過反射機制以獲取注解信息
5.編寫MyTestDemo測試類,利用反射機制獲取TestJUnit單元測試類的所有方法對象,並獲取單元測試類中所有方法對象,遍歷所有方法對象執行加有@MyTest注解的方法
6.啟動測試類查看結果(執行結果在最后)
注意:自定義注解類沒有編寫注解體,即無默認value值,標識需要啟動的方法。
注解類編譯后也是.class文件
通過反射機制來完成自定義注解操作,一定要給與注解和反射相同的生命周期
不會自動生成run方法啟動項