[JAVA] JUnit 4.0單元測試方法

[JAVA] JUnit 4.0單元測試方法

程式結構

以下是專案的程式結構

Image(3)

開發的程式

/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

程式碼內容

Image(4)

說明:

一般被測試的Method都是需要回傳值

而且不能設private(不然測試的程式怎麼使用XD)

測試的程式碼

TestMathUtil.java

Image(5)

測試方式:

Image(6)

測試結果:

Image(7)

說明:

一個測試程式的運作可以包括以下幾步驟

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

Image(8)

截圖2

Image(9)

測試結果:

Image(10)

說明:

第12行 使用org.junit.runner.JUnitCore決定要使用哪個runner,這裡使用Parameterized.class,可以在指定位置使用不同參數進行測試

第29~32行:存放測試需要的資料的實體變數

第34~37行:將參數轉換為實體變數

第39~44行:進行測試

補充

如果存在2個以上的測試method,同樣的參數會每個測試method都跑。

測試的程式碼(使用其他的測試功能)

TestMathUtilUseOther.java

Image(11)

測試結果

Image(12)

說明:

第5~12行:

故意忽略掉此測試method,當測試method未完成時,可以使用此作法。

我沒找到"故意忽略"的字串,是否有發揮作用還要再看。

測試結果跟直接使用@ignore似乎差不多

第14~21行:

故意拋出例外,(驗證出問題時是否會如預期的拋出例外)

第23~37行:

設定最大執行時間的限制,超出的時候就會拋出例外。單位是使用ms(1秒=1000ms)

測試程式碼(使用Suite)

Image(13)

測試結果

Image(14)

說明:

此寫法可以透過annotation將多個單元測試class(或suite)一起進行測試

總結

這裡提供幾種測試方法,可以只使用一種測試資料進行測試,也可以使用多種測試資料進行測試。

還有執行時間、是否拋出例外等測試方式。

最後還有使用Suite來組織測試程式,這樣就不用一個個class點選進行測試了。