我使用这种结构:
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()?
答案 0 :(得分:4)
Mockito构建了一个必须满足模拟类方法签名的代理。抛出的异常是此签名的一部分。您可以通过为测试方法声明throws Exception
来省略try / catches。
当然,通常不会抛出模拟对象的异常。只有在使用thenCallRealMethod()
时才能使用此功能。
答案 1 :(得分:1)
您无需捕获异常:
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将报告失败。