3 回答
TA贡献1875条经验 获得超5个赞
使用 lambda 函数:
Mockito.doAnswer(i -> { throw new Exception(); })
.when(service)
.getHTTPResponse("http://" + HOST + "/health");
TA贡献1856条经验 获得超5个赞
您可以使用自定义Answer实现引发已检查的异常:
Mockito.doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
throw new Exception();
}
})
.when(service)
.getHTTPResponse("http://" + HOST + "/health");
类型参数Object可能需要更改为任何结果service.getHTTPResponse。
TA贡献1877条经验 获得超6个赞
Mockito 尽最大努力确保传递的参数、返回的类型和抛出的异常的类型安全和一致性。
如果 Mockito 在编译时或运行时“停止”您,在大多数情况下这是正确的,您不必尝试绕过它,而是了解问题根源并纠正它。
实际上,您的实际要求是 XY 问题。
在 Java 中,检查已检查的异常。这意味着它必须被声明为由方法抛出。
如果您的getHTTPResponse()
方法未在其声明中声明throw Exception
(或其父类Throwable
),则意味着永远不会通过调用在运行时抛出异常,因此您的单元测试没有意义:您模拟了一个不可能的场景。
我认为,你想要的是扔RuntimeException
在 getHTTPResponse()
如:
when(service.getHTTPResponse("http://" + HOST + "/health")).thenThrow(RuntimeException.class);
ARuntimeException
不需要声明,这适合您的方法声明。
添加回答
举报