mockito doThrow返回null而不是引发异常

时间:2018-12-14 00:45:15

标签: java mockito

我们正在尝试使异常进入我们的catch块之一。为了做到这一点,我们希望在发出发布请求时引发异常。 两种选择似乎都不起作用。

   when(mockrestTemplate.postForObject(any(), any(), any())).thenThrow(new RestClientException("OOPS"));  
   doThrow(new RestClientException("OOPS")).when(mockrestTemplate).postForObject(any(), any(), any());

如果我使用doReturn并在预期的对象中传递预期的对象,它将正确模拟它。

如果我尝试引发异常,则不会引发异常,而是该行完全执行,导致变量设置为null,就像模拟返回了null值一样。

这是被嘲笑的函数的签名,是:

 public <T> T postForObject(URI url, Object request, Class<T> responseType) throws RestClientException

1 个答案:

答案 0 :(得分:0)

首先,我建议避免使用any(),因为这可能对重载方法产生意外行为。

第二,

when(mockedObject.someMethod(isA(Type.class))).thenThrow(new Exception());

应该为正确设置模拟而工作...如果未在被测方法上的“被测系统”中引发异常,请尝试验证该方法已被调用(在单元测试结束时)

verify(mockedObject).someMethod(isA(Type.class));