如何在 JUnit 测试中使用 ExpectedException 验证生产代码中的断言错误
How to validate assertion error in production code with ExpectedException in a JUnit test
在生产代码中的方法 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
。为什么会这样?
假设您使用的是 4.11,javadoc of ExpectedException
状态
By default ExpectedException
rule doesn't handle AssertionErrors
and
AssumptionViolatedExceptions
, because such exceptions are used by
JUnit. If you want to handle such exceptions you have to call
handleAssertionErrors()
or 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).
Deprecated. AssertionErrors are handled by default since JUnit 4.12. Just like in JUnit <= 4.10.
This method does nothing. Don't use it.
在生产代码中的方法 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
。为什么会这样?
假设您使用的是 4.11,javadoc of ExpectedException
状态
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()
.
假设使用 -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).
Deprecated. AssertionErrors are handled by default since JUnit 4.12. Just like in JUnit <= 4.10.
This method does nothing. Don't use it.