l

2013年3月22日 星期五

JUnit4的參數化測試案例(下)

Mar. 20 17:31~18:24

image

上集介紹如何用@RunWith(value = Parameterized.class)@Parameters這兩個annotation在JUnit中撰寫參數化測試案例。這一集介紹一個真正的例子。

 

測試判斷質數函數

假設鄉民們寫好了一個 public static boolean isPrime1(int n) 的method,用來判斷某個整數是否為質數,現在請鄉民們用JUnit 4寫一個參數化測試案例,請問要怎麼寫?

答案其實很簡單,請參下圖程式範例,重點在於16~20行設定測試資料的地方,這次每一組測試資料都包含兩筆資料,一個布林值和一個整數。布林值是expected result,整數則是帶入待測程式public static boolean isPrime1(int n)的參數。

螢幕快照 2013-03-20 下午5.42.19

 

執行結果如下,有8筆測試資料因此testPrime執行8次,JUnit所顯示的測試結果還滿清楚的。

螢幕快照 2013-03-20 下午5.51.18

***

新舊測試方式比較

在JUnit支援參數化測試案例之前,要達到上述同樣的測試結果,測試案例最直覺的方式就是寫成下面這個樣子:

螢幕快照 2013-03-20 下午6.10.39

 

鄉民們可以自行比較一下,哪種方式比較好。以「直覺性」來講舊的方式好像比較容易理解,但就測試案例管理的角度來看,參數化測試案例比較好,只要維護好測試資料,便可使用相同的測試案例得到多次測試結果。由於參數化測試案例只要準備好測試資料便可執行(驅動)測試案例N次,因此又稱為資料驅動測試案例(data-driven test case)

***

注意事項

如果鄉民們的測試類別使用了參數化測試案例,請記得在同一個測試類別裡面,不要使用「非參數化測試案例」。為什麼?因為參數化測試案例的執行次數是根據鄉民們所準備的參數數量而決定,就算有一個測試案例並未使用到這些參數,還是會被執行N次。請參考下圖:

把testPrime()和testPrimeTheOldWay()寫在一起。

螢幕快照 2013-03-20 下午6.16.53

 

testPrimeTheOldWay()也被執行了8次不要告訴別人

螢幕快照 2013-03-20 下午6.21.01

***

友藏內心獨白:參數化測試案例這個武器還不錯用。

沒有留言:

張貼留言