原文來自:http://www.cnblogs.com/byron0918/p/4801152.html
@RunWith, 當類被@RunWith註解修飾,或者類繼承了一個被該註解修飾的類,JUnit將會使用這個註解所指明的運行器(runner)來運行測試,而不是JUnit默認的運行器。
要進行參數化測試,需要在類上面指定如下的運行器:
@RunWith (Parameterized.class)
然後,在提供數據的方法上加上一個@Parameters註解,這個方法必須是靜態static的,並且返回一個集合Collection。
在測試類的構造方法中爲各個參數賦值,(構造方法是由JUnit調用的),最後編寫測試類,它會根據參數的組數來運行測試多次。
注意:必須要爲類的所有字段賦值,不管你是不是都用到!否則,Junit會出錯。
JUnit4中參數化測試要點: 1. 測試類必須由Parameterized測試運行器修飾 2. 準備數據。數據的準備需要在一個方法中進行,該方法需要滿足一定的要求: 1)該方法必須由Parameters註解修飾 2)該方法必須爲public static的 3)該方法必須返回Collection類型 4)該方法的名字不做要求 5)該方法沒有參數
public class Add {
public int add(int input1, int input2) {
return input1 + input2;
}
}
package org.test; import java.util.Arrays; import java.util.Collection; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; /** * 參數化測試的類必須有Parameterized測試運行器修飾 * */ @RunWith(Parameterized.class) public class AddTest3 { private int input1; private int input2; private int expected; /** * 準備數據。數據的準備需要在一個方法中進行,該方法需要滿足一定的要求: 1)該方法必須由Parameters註解修飾 2)該方法必須爲public static的 3)該方法必須返回Collection類型 4)該方法的名字不做要求 5)該方法沒有參數 * @return */ @Parameters @SuppressWarnings("unchecked") public static Collection prepareData(){ Object [][] bject = {{-1,-2,-3},{0,2,2},{-1,1,0},{1,2,3}}; return Arrays.asList(object); } public AddTest3(int input1,int input2,int expected){ this.input1 = input1; this.input2 = input2; this.expected = expected; } @Test public void testAdd(){ Add add = new Add(); int result = add.add(input1, input2); Assert.assertEquals(expected,result); } }
注:在測試的時候,例如我,在測試函數的時候,單獨測試一個方法,而不是將一個類中的所有的方法進行測試,而在參數化測試過程中,使用上面的測試方法,一直不能通過,到後來沒有辦法了,運行了整個測試類,代碼通過了,回頭一想也也確實這麼回事,這個參數化方法測試函數需要上面的參數,而單獨運行一個函數的話就無法獲取上面的變量。所有在測試參數化測試用例的時候,要運行整個測試類。
本文根據http://www.cnblogs.com/mengdd/archive/2013/04/13/3019336.html和http://www.51testing.com/html/88/377588-817359.html整理而來。