[JAVA] JUnit 4.0單元測試方法
程式結構
以下是專案的程式結構
開發的程式
/Junit4Practice/src/MathUtil.java
測試的程式
/Junit4Practice/src/TestMathUtil.java
/Junit4Practice/src/TestMathUtilUseOther.java
/Junit4Practice/src/TestMathUtilWithParam.java
使用的jar檔
junit-4.11-SNAPSHOT-20120416-1530.jar
開發的程式
MathUtil.java
程式碼內容
說明:
一般被測試的Method都是需要回傳值
而且不能設private(不然測試的程式怎麼使用XD)
測試的程式碼
TestMathUtil.java
測試方式:
測試結果:
說明:
一個測試程式的運作可以包括以下幾步驟
1.初始化(使用@Before or @BeforeClass)
2.測試(使用@Test)
3.還原狀態(使用After or @AfterClass)
第1步驟和第3步驟都是可以選擇性是否使用的
method的名稱沒有限制,但一般都是使用test作為開頭
使用@Test的method可以不只一個
如果執行程式會產生「副作用」而影響下一次執行結果,可以@Before和@After來解決此問題
補充
@Before和@After是針對每個測試method的前後進行的,也就是一個測試class可能會跑不只一次
@BeforeClass和@AfterClass是針對每個測試Class前後進行的,也就是一個測試class只會跑一次
據說@Before和@After可以多次指定(但我沒試驗過)
測試的程式碼(使用參數)
TestMathUtilWithParam.java
截圖1
截圖2
測試結果:
說明:
第12行 使用org.junit.runner.JUnitCore決定要使用哪個runner,這裡使用Parameterized.class,可以在指定位置使用不同參數進行測試
第29~32行:存放測試需要的資料的實體變數
第34~37行:將參數轉換為實體變數
第39~44行:進行測試
補充
如果存在2個以上的測試method,同樣的參數會每個測試method都跑。
測試的程式碼(使用其他的測試功能)
TestMathUtilUseOther.java
測試結果
說明:
第5~12行:
故意忽略掉此測試method,當測試method未完成時,可以使用此作法。
我沒找到"故意忽略"的字串,是否有發揮作用還要再看。
測試結果跟直接使用@ignore似乎差不多
第14~21行:
故意拋出例外,(驗證出問題時是否會如預期的拋出例外)
第23~37行:
設定最大執行時間的限制,超出的時候就會拋出例外。單位是使用ms(1秒=1000ms)
測試程式碼(使用Suite)
測試結果
說明:
此寫法可以透過annotation將多個單元測試class(或suite)一起進行測試
總結
這裡提供幾種測試方法,可以只使用一種測試資料進行測試,也可以使用多種測試資料進行測試。
還有執行時間、是否拋出例外等測試方式。
最後還有使用Suite來組織測試程式,這樣就不用一個個class點選進行測試了。