java - 如何验证 JUnit 测试中抛出的异常的详细信息?

标签 java unit-testing exception junit mockito

我正在编写一个 JUnit/Mockito 测试,预计会抛出异常。当然我可以这样做:

@Test(expected=IllegalArgumentException.class)

但是它被抛出后不允许我做任何其他事情。所以我在想也许更像是:

Exception actualEx = null;
try {
    // Act
    sut.doStuff();
} catch (final Exception ex) {
    actualEx = ex;
}
// Assert
assertTrue(IllegalArgumentException.class.equals(actualEx.getClass()));
// ... perhaps verify the exception details
verifyNoMoreInteractions(mockObject);

这看起来很丑陋,感觉可以改进 - 有更好的方法吗?

最佳答案

我认为您应该在整个项目中保持一致 - 尽管有三到四种不同的方法可以解决这个问题,但您绝对不应该尝试使用所有这些方法。

由于ExpectedException机制是最强大且最通用的方法,因此我建议您学习使用它。其优点如下。

  • 很容易检查抛出的异常的类型及其消息。
  • 如果需要,您可以对异常进行更复杂的匹配。
  • 您可以通过将 expect 调用紧接在您期望引发异常的行之前放置,来准确检查测试的哪一行引发了异常。

冒着听起来像洗发水广告的风险 - 既然我已经使用了 ExpectedException,我就不会使用其他任何东西了!

关于java - 如何验证 JUnit 测试中抛出的异常的详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067033/

相关文章:

java - 如何根据中心坐标确定矩形的左上坐标?

java - 如何正确使用子串

unit-testing - 最小起订量是否取代标准 VS 'Assert' 测试?

javascript - 需要一些类似访客的设计模式

json - 如何在 Spring Controller 单元测试中访问 CSRF token ?

c++ - 尝试/捕获整个程序

asp.net - 在哪里写异常

java - 使用 Java Pattern 和 Matcher 搜索包含正斜杠等标点符号的模式

exception - BlackBerry - 从位图创建图形对象时出现异常

java - 如何在容器内调试 Java EE 应用程序?