Reputation: 1263
I am upgrading Junit 4 to Junit 5 and want to convert parameterized test from Junit4 to Junit5, but facing below issue.
@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));
}
I would like to do same thing in Junit 5, and changed code as below.
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));
}
But it does not initialise the global variables inputNumber
and expectedResult
, both are null here. If I provide these two as argument of the test method then it works.
But what if I have numbers of parameter, is there any way?
what can I use instead of @Parameter
?
Upvotes: 1
Views: 2685
Reputation: 1639
Below code should work, haven't tested it though
@ParameterizedTest
@CsvSource({"2,true", "6,false", "19,true"})
public void checkPrime(int inputNumber, boolean expetedResult){
assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
}
Upvotes: 1
Reputation: 9110
You're almost there. The trick is that with JUnit 5's ParameterizedTest
, it's not the class that's parameterized but the method:
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));
}
Upvotes: 0