在JUnit 4可使用參數化測試(Parameterized Test),也就是一個測試方法可重複測試多筆參數。
透過Parameterized Test Runner及@Parameter
方法來注入要測試的多筆參數。
下面的Calculator.addInteger(int x, int y)
為要被測試的方法。
public class Calculator {
public int addInteger(int x, int y) {
return x + y;
}
}
ParameterizedTest
為參數化測試類別,也就是JUnit中的Runner,用來設定要測試的多筆參數並進行測試。
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(value=Parameterized.class)
public class ParameterizedTest {
private int expected; // 預期的結果
private int x; // 參數1
private int y; // 參數2
/* 用來測試的多筆參數設定在這個方法
* 此方法必須為static方法, 且回傳型態為Collection
* Collection中的type為陣列, 陣列的長度必須與ParameterizedTest的建構式相同
* 因為加了@Paramters, 所以在執行測試時JUnit會先呼叫此方法並loop陣列中的參數, 並依序建立ParameterizedTest的實例來測試
*/
@Parameters
public static Collection getTestParameters() {
return Arrays.asList(new Integer[][] {
{2, 1, 1},
{3, 2, 1},
{4, 3, 1}
});
}
// ParameterizedTest的建構式
public ParameterizedTest(int exptected, int x, int y) {
this.expected = exptected;
this.x = x;
this.y = y;
}
@Test
public void testAddInteger() {
Calculator cal = new Calculator();
assertEquals(expected, cal.addInteger(x, y));
}
}
參數化測試類別的撰寫方式如下
- 參數化測試類別名稱加上
@RunWith
annotation,值為Parameterized.class
。 - 新增成員變數,用來作為被測試方法的傳入參數及預期結果。本範例為
expected
,x
,y
。 - 新增一個無參數的
public static Collection
方法,該方法前加上@Parameters
。本範例為getTestParameters()
。此方法在JUnit執行測試前會被先呼叫並loop裡面的參數陣列來建構每一次參數化測試類別(即ParameterizedTest
)的實例。方法的回傳值為一個由多筆參數構成的陣列,每一個陣列長度必須與參數化測試類別的建構式相同。 - 新增一個參數化測試類別的建構式(Constructor),建構式的參數分派至成員變數。此建構式的傳入值來自於
@Parameters
方法(即getTestParameters()
)。 - 新增一個
@Test
測試方法(即testAddInteger()
),用來呼叫被測試的方法。
因為範例中設定三組參數陣列,所以ParameterizedTest
一共會被實例化三次並分別執行testAddInteger()
。
如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。
參考:
沒有留言:
張貼留言