參數化測試 Parameterized
JUnit也可以一次接收多個參數進行重複測試,下面validate方法是用來驗證一個數字是否為質數, 我們要輸入很多數字來對validate進行測試。
- 首先要建立ParameterizedTest建構子,這邊的建構子接受兩個參數,inputNumber為測試的數字,expectedResult為預期結果
- 接著寫一個static的參數列方法(primeNumbers),在方法上加上@Parameterized.Parameters
- testPrimeNumberChecker是真正的測試程式,primeNumbers內的參數會依序傳入assertEquals進行測試
- 例如第一組會傳入2,我們預期的結果是true,因為我們輸入了5組參數,因此test會執行5次
package yan.junit;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class ParameterizedTest {
private Integer inputNumber;
private Boolean expectedResult;
// inputNumber為測試的數字,expectedResult為預期結果
public ParameterizedTest(Integer inputNumber, Boolean expectedResult) {
this.inputNumber = inputNumber;
this.expectedResult = expectedResult;
}
// 參數量需與coustructor內的參數量一樣, {2,true} <=> inputNnmber, expectedResult
@Parameterized.Parameters
public static Collection<Object[]> primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}
// 測試程式會執行5次,因為我們輸入了5組參數
@Test
public void testPrimeNumberChecker() {
assertEquals(expectedResult, validate(inputNumber));
}
/**
* 測試一個數字是否為質數
* @return
*/
private Boolean validate(final Integer primeNumber) {
for (int i = 2; i < (primeNumber / 2); i++) {
if (primeNumber % i == 0) {
return false;
}
}
return true;
}
}
測試結果