java - 在 Java 中,如何使用 JUnit 验证抛出的异常?

标签 java exception exception-handling junit

在为 Java API 编写单元测试时,您可能希望对异常执行更详细的验证。 IE。比 JUnit 提供的 @test 注释提供的更多。

例如,考虑一个应该从其他接口(interface)捕获异常的类,包装该异常并抛出被包装的异常。您可能需要验证:

  1. 引发包装异常的确切方法调用。
  2. 包装器异常的原因是原始异常。
  3. 包装异常的消息。

这里的重点是,您希望在单元测试中对异常进行额外验证(而不是关于您是否应该验证异常消息等内容的争论)。

对此有什么好的方法?

最佳答案

在 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/

相关文章:

c# - 捕获通用的非致命异常

python - 捕获不从 Exception 继承的异常

java - Testng 测试带有消息的特定异常

java - 我应该使用 EnumSet 吗?

python - Tornado如何返回错误异常?

c++ - 嵌套的 try-catch block ?

java - 验证失败时在 Spring RestController 中抛出什么类型的异常?

java - 我有一个带有 @ExceptionHandler 的父类和一个带有自己版本的子类。我收到一个不明确的方法错误

java - ConcurrentModificationException,但没有修改

java - 当套接字被接受时,我怎样才能关闭这个对话框?