When writing unit / integration tests, you often want to execute something multiple times, with different configurations / parameters / arguments every time. For instance, if you want to pass a “limit” or “timeout” or any other argument value of 1, 10, and 100, you could do this:
@Test
public void test() {
runCode(1);
runCode(10);
runCode(100);
}
private void runCode(int argument) {
// Run the actual test
assertNotNull(new MyObject(argument).execute());
}
Exracting methods is the most obvious approach, but it can quickly get nasty, as these extracted methods are hardly re-usable outside of that single test-case and thus don’t really deserve being put in their own methods. Instead, just use this little trick:
@Test
public void test() {
// Repeat the contents 3 times, for values 1, 10, 100
for (int argument : new int[] { 1, 10, 100 }) {
// Run the actual test
assertNotNull(new MyObject(argument).execute());
}
// Alternatively, use Arrays.asList(), which has a similar effect:
for (Integer argument : Arrays.asList(1, 10, 100)) {
// Run the actual test
assertNotNull(new MyObject(argument).execute());
}
}
Like this:
Like Loading...
Published by lukaseder
I made jOOQ
View all posts by lukaseder
You can also look at jUnit’s @Parameterized which I have used often: http://junit.sourceforge.net/javadoc/org/junit/runners/Parameterized.html
I see, I should start looking at some “advanced” JUnit features ;-)
I was going to suggest using JUnit’s features for this.
Really, using a loop over an array to test several values is not exactly ground-breaking.
No, “ground-breaking” is different ;-) But occasionally, this trick comes in handy and might take less time to write
I dislike this approach because your test fails if the test n test fails. You do not get an overview of all test cases, you don’t know if the test n+1 fails or works correctly.
Parameterized tests are the way to go here as mentionend by agentgt
Add “n” or “n+1” to the assertion message, and you’ll know… Of course, this can be used outside of writing tests. Tests are just one example