A popular complaint against JUnit is lack of human-readable names for parameterized test cases. There are several solutions, this is mine.
/** * {@code ParameterizedTest} simplifies parametered JUnit tests by including a "case label" to * identify the failing branch. (JUnit only provides an index). The failure message format * becomes "descriptive string from JUnit: case label: assertion failure message". * <p/> * Fully preserves the stack trace of failing tests. * <p/> * Example: <pre> * public class MyTest { * @Parameters * public static Collection<Object[]> parameters() { * return ...; // See JUnit documentation for parameterized tests * } * * public MyTest(final String caseLabel, final X x, final Y y) { * super(caseLabel); * this.x = x; * this.y = y; * } * * @Test * public void shouldWork() { * // Body of test method ... * } * } * </pre> * When {@code shouldWork()} fails the failure message is more meaningful, including the * {@link #caseLabel "case label"} in the JUnit error message. * * @author <a href="mailto:binkley@alumni.rice.edu">B. K. Oxley (binkley)</a> */ @RunWith(Parameterized.class) public abstract class ParameterizedTest { private final String caseLabel; /** * The JUnit test rule (test extension) which fails bad parameterized cases but provides a * {@link #caseLabel case label} identifing the failed test branch. */ @Rule public final TestRule parameterizedTestRule = new TestWatcher() { @Override protected void failed(final Throwable e, final Description description) { final AssertionError x = new AssertionError( description.getDisplayName() + ": " + caseLabel + ": " + e.getMessage()); x.setStackTrace(e.getStackTrace()); throw x; } }; /** * Constructs a new {@code ParameterizedTest} for the given <var>caseLabel</var>. * * @param caseLabel the case label, never missing */ protected ParameterizedTest(@Nonnull final String caseLabel) { this.caseLabel = caseLabel; } }
1 comment:
Thanks, this was a good workaround.
I've just read that support for parameter names was added last week with JUnit 4.11:
https://github.com/KentBeck/junit/blob/master/doc/ReleaseNotes4.11.md
Post a Comment