Update: after listening to a recent episode of Java Posse, I found out about parameterized tests for JUnit which seems to be a better option than the method described below. Live and learn.
Let’s say you have a lot of similar cases in a jUnit test. You might be tempted to write a loop to factor out the commonalities. Take the following (trivial) example:
public class TestUnitTest {
@Test
public void testMultiple() throws Exception {
Integer cases[][] = {
{1, 2, 3},
{2, 3, 6},
{1, 1, 2},
{3, 0, 3},
};
for (Integer[] c : cases)
assertEquals((Integer)(c[0] + c[1]), c[2]);
}
}
The problem is that the exception will be always at the same line. I found that it is easier to factor out the functionality into a method and call that method repeatedly:
public class TestUnitTest {
private int sum(int a, int b) {
return a + b;
}
@Test
public void testLineByLine() throws Exception {
assertEquals(sum(1, 2), 3);
assertEquals(sum(2, 3), 6);
assertEquals(sum(1, 1), 2);
assertEquals(sum(3, 0), 3);
}
}
This way you will see in your stacktrace which subcase failed exactly.
Picture taken from psd's photostream with permission.





0 comments:
Post a Comment
You can use some HTML tags, such as <b>, <i>, <a>. Comments are moderated, so there will be a delay until the comment appears. However if you comment, I follow.