Mar. 20 15:03~17:10
前一陣子Kay跟Teddy談到JUnit 4的一些新功能,回想起來好一陣子都沒有關注JUnit 4的發展,最近抽空看了一下,發現JUnit 4有支援了「參數化測試案例」這個Teddy好久以前就一直想要使用的功能。今天介紹一下JUnit 4參數化測試案例的使用方法。
鄉民甲:什麼是參數化測試案例?
先不要管參數化測試案例,你聽過氨粒嗎…XD。
參數化測試案例就是使用同一個測試案例,利用帶入不同參數的方式(控制輸入值),達到測試待測程式不同執行路徑的目的。如果還是看不懂等一下看範例就知道了。
使用Annotation
忘了從哪一版的JUnit開始就慢慢採用annotation作為擴充測試框架的一種機制。早期的JUnit規定測試案例(test method)命名方式一定要test開頭,例如testPrime(),後來只要在測試案例前面加上@Test這個annotation,測試案例要如何取名就沒有限制。JUnit 4也是利用annotation來支援參數化測試案例。
要支援參數化測試案例,會使用到兩個新的annotation:
- @RunWith
- @Parameters
請看範例:
@RunWith 這個annotation加在測試類別(test case)身上,它用來告訴JUnit要採用哪一個Test Runner去執行測試案例。所以@RunWith(value = Parameterized.class) 告訴JUnit請用Parameterized這個類別來執行測試案例。到JUnit的官方網站可以查到Parameterized是Runner的子類別。
以上都看不懂也沒關系,總之要實作參數化測試案例的第一步就是要在測試類別加上@RunWith(value = Parameterized.class)這個annotation。
***
接下來要準備測試參數,測試參數必須放在一個public static List[]裡面,以下面程式碼為例,準備了四組測試案例,分別是1, 2, 3, 4。在這組測試上面加上@Parameters這個annotation,這樣子JUnit就知道這裡面的資料要當作測試用的參數。
將測試參數對應到instance variable
看到這邊鄉民們可能會想,要如何在測試案例中逐一使用剛剛設定好的測試參數呢?答案很簡單,為每一組測試案例宣告一個instance variable,然後透過constructor設定這個instance variable的值。如下圖所示:
之後JUnit執行這個測試類別裡面有所有測試案例(測試方法)時,便會自動將測試參數的值(上一個步驟所宣告的public static List[])逐一設定給mArgument這個instance variable。接下來鄉民們就可以在測試案例中使用mArgument當作測試資料。
測試案例與執行結果
以下兩個例子單純把mArgument的值給印出來,看看是否執行這個測試類別之後,會印出1,2,3,4。
從Eclipse中執行這個測試類別:
以下是執行結果,由此可知每一個測試案例會被執行N次(N等於測試參數的個數)。
***
看到這邊鄉民們應該了解參數化測試案例的寫法,但是一組測試資料裡面只有一筆資料的這種「參數」其實派不上什麼用場,因為在寫測試案例時,每一個assertion至少也要準備expected result與一組餵給待測程式的參數。也就是說,每一組測試參數通常都需要兩筆資料,例如{1, 5}或是{true, 7}。至於在一組參數中設定多筆測試資料下集再繼續介紹。
***
友藏內心獨白:這一集也寫太久了吧。
沒有留言:
張貼留言