我正在使用 Junit 4 和 Mockito,我想 stub 一个方法调用,以便它抛出异常:
doThrow(MyException.class).when(myObject).foo();
问题是,MyException 是一个已检查的异常,因此在该语句中调用 foo()
导致编译器提示我必须处理异常或向我的方法添加 throws 子句.
所以我想知道处理这种情况的正确方法是什么?到目前为止,我的想法是:
- 我用错了,有更好的方法。
- 我只是将
throws MyException
添加到测试方法 - 我将调用提取到另一个只吞没异常的方法
例如
private void givenFooThrowsAnException(MyObject myObject) {
try {
doThrow(MyException.class).when(myObject).foo();
} catch (MyException e) {
// Required to stub a checked exception
}
}
最佳答案
虽然 stub 迫使您处理已检查的异常,但它实际上永远不会抛出该异常。最优雅的方法是声明测试方法以抛出该异常。
这种方法只有一个警告。如果您的测试实际上通过在 @Test
注释中声明它来验证是否抛出了已检查的异常。
@Test(expected=MyException.class)
public void test...() throws MyException {
//...
}
在那种情况下,如果你的 stub 被搞砸了并且确实抛出了已检查的异常,它可能会产生一个可能应该失败的通过测试。
或者你可以简单地 use unchecked exceptions .
关于java - stub 检查异常 : how to handle the exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200898/