【发布时间】:2022-01-31 12:23:23
【问题描述】:
我正在将 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));
}
但它并没有初始化全局变量inputNumber和expectedResult,这里都是null。如果我提供这两个作为测试方法的参数,那么它就可以工作。
但是如果我有多个参数怎么办,有什么办法吗?
我可以用什么来代替@Parameter?
【问题讨论】:
-
好吧,您实际上可以初始化它们,而不仅仅是声明它们。您所编写的代码究竟会发生什么?
-
我想在Junit5测试中给@Parameter注解变量赋值
-
您可以使用上述评论中建议的方法,也可以在
@BeforeAll方法中初始化它 -
@NisargPatil,我想运行参数化测试,如果我在
@BeforeAll中设置它不会是参数化测试。您可以查看我的 Junit 4 示例,在此primeNumbers方法中的每个数据将初始化全局变量并在参数化测试中使用
标签: java testing junit junit4 junit5