在生产代码中的方法myMethod
中的某个地方进行断言,如:
public void myMethod(List list1, List list2) {
assert list1.size() == list2.size()
}
和单元测试
@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));
}
我希望单元测试成功运行,但我得到了AssertionError
。为什么会这样?
答案 0 :(得分:2)
假设您正在使用4.11,javadoc of ExpectedException
州
默认
ExpectedException
规则不会处理AssertionErrors
和AssumptionViolatedExceptions
,因为这些例外被使用 JUnit的。如果你想处理这些例外,你必须打电话handleAssertionErrors()
或handleAssumptionViolatedExceptions()
。
假设使用-ea
选项启用了断言,只需添加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).
已过时。自JUnit 4.12起,默认处理AssertionErrors。就像在JUnit< = 4.10。
中一样此方法不执行任何操作。不要使用它。