如何在JUnit测试中使用ExpectedException验证生产代码中的断言错误

时间:2016-12-20 14:43:30

标签: java junit assert

在生产代码中的方法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。为什么会这样?

1 个答案:

答案 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。

中一样      

此方法不执行任何操作。不要使用它。