我正在编写一个 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/