为什么"declaring"模拟时必须处理异常?模拟#当



我使用此结构:

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

用于模拟此接口:

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

但是,我不明白为什么在测试中使用Mockito#时必须捕获异常?绝对不应该在模拟的"声明"中抛出例外情况,对吗?那么,为什么我必须在那里处理呢?...我应该如何处理?assert.fail()?

Mockito构建一个代理,必须满足模拟类方法的签名。抛出的例外是此签名的一部分。您可以通过向测试方法宣布throws Exception来省略尝试/捕获。

当然,模拟物体的例外通常不会被抛弃。仅当您使用thenCallRealMethod()

时才有可能

您不需要捕获异常:

import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.when;
...
@Test
public void something() throws Exception {
  when(rules1.onEvent(isA(OnEventArgs.class), isA(Response.class)).thenReturn(true); 
  ...
}

如果测试引发任何例外,Junit将报告失败。

相关内容

  • 没有找到相关文章

最新更新