Reputation: 3638
Having an assertion somewhere in a method myMethod
in the production code like:
public void myMethod(List list1, List list2) {
assert list1.size() == list2.size()
}
and a unit test
@Rule
public ExpectedException ex = ExpectedException.none();
@Test
public void test() throws Exception {
ex.expect(java.lang.AssertionError.class);
myMethod(Arrays.asList(1, 2), Arrays.asList(1, 2, 3));
}
I expect the unit test to successfully run but I get the AssertionError
. Why is it so?
Upvotes: 0
Views: 664
Reputation: 280102
Assuming you're using 4.11, the javadoc of ExpectedException
states
By default
ExpectedException
rule doesn't handleAssertionErrors
andAssumptionViolatedExceptions
, because such exceptions are used by JUnit. If you want to handle such exceptions you have to callhandleAssertionErrors()
orhandleAssumptionViolatedExceptions()
.
Assuming assertions are enabled with the -ea
option, just add the call the handleAssertionErrors()
@Test
public void test() throws Exception {
ex.handleAssertionErrors();
ex.expect(java.lang.AssertionError.class);
myMethod(Arrays.asList(1, 2), Arrays.asList(1, 2, 3));
}
You should no longer need the above in JUnit 4.12 (or in versions 10 and under).
Deprecated. AssertionErrors are handled by default since JUnit 4.12. Just like in JUnit <= 4.10.
This method does nothing. Don't use it.
Upvotes: 2