java - 为什么我必须在 "declaring"mock 时处理异常?模拟#when

标签 java junit mocking mockito

我使用这个结构:

try {
    Mockito.when(rules1.onEvent(Mockito.<OnEventArgs>any(), Mockito.<Response>any())).thenReturn(true);
} catch (MalformedEventException e) {
    Assert.fail();
}

模拟这个接口(interface):

public interface Rules {
    boolean onEvent(OnEventArgs onEventArgs, Response response) throws MalformedEventException;
}

但是,我不明白为什么我在测试中使用 Mockito#when 时必须捕获异常?永远不应该在 mock 的“声明”中抛出异常,对吧?那么为什么我必须在那里处理它呢? ……我该如何处理?断言失败()?

最佳答案

Mockito 构建了一个代理,它必须满足模拟类方法的签名。抛出的异常是此签名的一部分。您可以通过为您的测试方法声明 throws Exception 来省略 try/catches。

当然,通常不会抛出模拟对象的异常。这只有在您使用 thenCallRealMethod() 时才有可能。

关于java - 为什么我必须在 "declaring"mock 时处理异常?模拟#when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578809/

相关文章:

java - PowerMock,模拟使用静态方法的类的方法抛出空指针异常

java - ScrollView 不是从顶部开始

java - Sonarqube - 方法使用 FileInputStream 构造函数时出现性能问题,有哪些更好的替代方案?

java - 如何对双向文本处理进行单元测试

flutter - 如何模拟导航参数以测试 flutter 屏幕小部件?

ruby - 如何使用 Rspec 模拟模型属性?

java - 如何以网络模式启动GWT?

java - Spring Batch XML 项目读取

java - 字符串值的断言无法正常工作

java - Play Framework 在内存 h2 数据库中用于单元测试