我无法理解以下代码背后的语义。
@Test
public void TestAbc() throws AbcException {
// method to test
object.handle();
// assertions
verify(someThing).someMethod();
verify(problemObject).problemMethod();
}
其中handle方法的定义如下:
public void handle() {
try {
someThing.someMethod();
// throws AbcException
problemObject.problemMethod();
}
catch (AbcException e) {
LOGGER.error(e.getMessage());
}
}
现在在我的测试中,我正在执行 throws AbcException
以保持语法正确,但这实际上没有意义,因为我在 handle 方法中捕获异常并且没有进一步抛出它。但是测试方法转换为“TestAbc
throws AbcException
”,但事实并非如此。所以我的问题是为什么我需要将 throws AbcException
添加到我的测试方法中,即使它没有被抛出?有人可以帮助我理解这一点吗?
最佳答案
verify(problemObject)
返回一个 Mockito 类的实例,用于指定您要验证的内容。为了允许您可以简单地在此对象上调用 problemMethod()
的流畅语法,该类实现了 problemObject
正在模拟的接口(interface)(或扩展类)。尽管此类中的 problemMethod()
仅具有检查是否在 mock 上调用了 problemMethod()
的效果,但 Java 编译器不知道这一点而只看到了这一点您正在调用其签名为 throws AbcException
的方法,因此您需要处理它。
P.S.:除非您有其他设置代码,否则您模拟的 problemMethod
实际上不会抛出任何东西 - 您需要为此显式设置模拟:
when(problemObject.problemMethod()).thenThrow(new AbcException());
关于java - 了解 Mockito 验证背后的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34331518/