当“声明”模拟时,为什么我必须处理异常? Mockit#当

时间:2017-03-03 12:22:53

标签: java junit mocking mockito

我使用这种结构:

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()?

2 个答案:

答案 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将报告失败。