如何在Junit 5中初始化类的全局变量



我正在将Junit 4升级到Junit 5,并希望将参数化测试从Junit4转换到Junit5,但面临以下问题。

@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
@Parameter(0)
private Integer inputNumber;
@Parameter(1)
private Boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;
@Before
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}

@Test
public void checkPrime(){
assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
}

我想在Junit 5中做同样的事情,并更改了如下代码。


public class PrimeNumberCheckerTest {
@Parameter(0)
private Integer inputNumber;
@Parameter(1)
private Boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;
@BeforeAll
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}

public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}

@ParameterizedTest
@MethodSource("primeNumbers")
public void checkPrime(){
assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
}

但它并没有初始化全局变量inputNumberexpectedResult,它们在这里都是空的。如果我提供这两个作为测试方法的论据,那么它就起作用了。

但如果我有一些参数,有什么办法吗?

我可以用什么代替@Parameter

下面的代码应该可以工作,还没有通过进行测试

@ParameterizedTest
@CsvSource({"2,true", "6,false", "19,true"})
public void checkPrime(int inputNumber, boolean expetedResult){
assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
}

您就快到了。诀窍在于,使用JUnit 5的ParameterizedTest,参数化的不是类,而是方法:

public class PrimeNumberCheckerTest {
private PrimeNumberChecker primeNumberChecker;
@BeforeAll
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}

public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}

@ParameterizedTest
@MethodSource("primeNumbers")
public void checkPrime(int inputNumber, boolean expetedResult){
assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
}

最新更新