Mockito:如何验证方法是在另一个方法中调用,它总是抛出异常?

时间:2016-11-10 10:02:28

标签: junit exception-handling mockito

我正在测试一个带有预期异常的方法。 我还需要验证在抛出异常后调用了某些代码(在模拟对象上),但是忽略了验证。 这是代码:

public class ExceptionHandler {

    @Autowired
    private Sender sender;

    public void handle(Exception exception) throws Exception {
      if (!SomeException.class.isAssignableFrom(exception.getClass())) {
        sender.sendMessage(ExceptionUtils.getStackTrace(exception));
      }
      throw exception;
    }
}

这是测试代码:

@Mock
private Sender sender;

@InjectMocks
private ExceptionHandler handler;

@Test
public void testHandler() throws Exception {
    SomeException someException = new SomeException();

    try {
        handler.handle(someException);
    } catch (SomeException thrownResult) {
        assertEquals(someException, thrownResult);
    }

    verify(sender, times(1)).sendMessage(Mockito.anyString());
}

1 个答案:

答案 0 :(得分:1)

  

我还需要验证是否调用了某些代码(在模拟对象上)   抛出异常后,但忽略验证。

事实并非如此,此行 实际执行:

verify(sender, times(1)).sendMessage(Mockito.anyString());

但是这个错误无法验证:

  

通缉但未调用:sender.sendMessage();

     

< ...>

     

实际上,这个模拟没有互动。

正如预期的那样,从未调用该方法,因为条件!SomeException.class.isAssignableFrom(exception.getClass())不满足 - 您使用handler.handle的实例调用SomeException