JUnit 4.x – Testing Framework : Parameterized Example
Parameterized Example |
JUnit 4 has introduced a new feature Parameterized tests.
Parameterized tests allow developer to run the same test over and over again using different values. There are five steps, that you need to follow to create Parameterized tests.
1. Annotate test class with @RunWith(Parameterized.class)
2. Create a public static method annotated with @Parameters that returns a Collection of Objects (as Array) as test data set.
3. Create a public constructor that takes in what is equivalent to one “row” of test data.
4. Create an instance variable for each “column” of test data.
5. Create your tests case(s) using the instance variables as the source of the test data.
6. The test case will be invoked once per each row of data.
PrimeNumberFinder.java
package com.javaskool;
public class PrimeNumberFinder {
public Boolean validate(final Integer primeNumber) {
for (int i = 2; i < (primeNumber / 2); i++) {
if (primeNumber % i == 0) {
return false;
}
}
return true;
}
}
MyParameterizedTest.java
package com.javaskool;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.Before;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class MyParameterizedTest {
private Integer inputNumber;
private Boolean expectedResult;
private PrimeNumberFinder primeNumberFinder;
@Before
public void initialize() {
primeNumberFinder = new PrimeNumberFinder();
}
// Each parameter should be placed as an argument here
// Every time runner triggers, it will pass the arguments
// from parameters we defined in primeNumbers() method
public MyParameterizedTest(Integer inputNumber, Boolean expectedResult) {
this.inputNumber = inputNumber;
this.expectedResult = expectedResult;
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true },{ 29, true }
});
}
// This test will run 4 times since we have 5 parameters defined
@Test
public void testPrimeNumberFinder() {
System.out.println("Parameterized Number is : " + inputNumber);
assertEquals(expectedResult, primeNumberFinder.validate(inputNumber));
}
}
MyParameterizedRunner.java
package com.javaskool;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class MyParameterizedRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(MyParameterizedTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Downloads Examples |
Click here to Download Parameterized JUnit Test Example
Click here to Download Annotation based JUnit Example
Click here to Download Shopping Cart JUnit Example
Recent Comments