Is there a way to set my own custom test case names when using parameterized tests in JUnit4?
I'd like to change the default — [Test class].runTest[n]
— to something meaningful.
This feature has made it into JUnit 4.11.
To use change the name of parameterized tests, you say:
@Parameters(name="namestring")
namestring
is a string, which can have the following special placeholders:
{index}
- the index of this set of arguments. The default namestring
is {index}
.{0}
- the first parameter value from this invocation of the test.{1}
- the second parameter valueThe final name of the test will be the name of the test method, followed by the namestring
in brackets, as shown below.
For example (adapted from the unit test for the Parameterized
annotation):
@RunWith(Parameterized.class)
static public class FibonacciTest {
@Parameters( name = "{index}: fib({0})={1}" )
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
{ 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
}
private final int fInput;
private final int fExpected;
public FibonacciTest(int input, int expected) {
fInput= input;
fExpected= expected;
}
@Test
public void testFib() {
assertEquals(fExpected, fib(fInput));
}
private int fib(int x) {
// TODO: actually calculate Fibonacci numbers
return 0;
}
}
will give names like testFib[1: fib(1)=1]
and testFib[4: fib(4)=3]
. (The testFib
part of the name is the method name of the @Test
).