我们正在尝试使异常进入我们的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
答案 0 :(得分:0)
首先,我建议避免使用any()
,因为这可能对重载方法产生意外行为。
第二,
when(mockedObject.someMethod(isA(Type.class))).thenThrow(new Exception());
应该为正确设置模拟而工作...如果未在被测方法上的“被测系统”中引发异常,请尝试验证该方法已被调用(在单元测试结束时)>
verify(mockedObject).someMethod(isA(Type.class));