在为 Java API 编写单元测试时,您可能希望对异常执行更详细的验证。 IE。比 JUnit 提供的 @test 注释提供的更多。
例如,考虑一个应该从其他接口(interface)捕获异常的类,包装该异常并抛出被包装的异常。您可能需要验证:
- 引发包装异常的确切方法调用。
- 包装器异常的原因是原始异常。
- 包装异常的消息。
这里的重点是,您希望在单元测试中对异常进行额外验证(而不是关于您是否应该验证异常消息等内容的争论)。
对此有什么好的方法?
最佳答案
在 JUnit 4 中,可以使用 ExpectedException 轻松完成。规则。
这是来自 javadocs 的示例:
// These tests all pass.
public static class HasExpectedException {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void throwsNothing() {
// no exception expected, none thrown: passes.
}
@Test
public void throwsNullPointerException() {
thrown.expect(NullPointerException.class);
throw new NullPointerException();
}
@Test
public void throwsNullPointerExceptionWithMessage() {
thrown.expect(NullPointerException.class);
thrown.expectMessage("happened?");
thrown.expectMessage(startsWith("What"));
throw new NullPointerException("What happened?");
}
}
关于java - 在 Java 中,如何使用 JUnit 验证抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/785618/