如何解决使用来自 Mockito Junit 测试的自定义消息引发异常
try {
response = restTemplate.postForEntity(endPoint,request,Object.class);
lOGGER.info("response is " + response);
} catch (Exception e) {
lOGGER.error("Exception :" + e.getMessage());
if ((e.getMessage().contains("401") || e.getMessage().contains("Unauthorized")) ) {
ServiceImpl.evictTokenCache("authToken");
getData(requestDto);
} else {
throw new CustomException(e.getMessage());
}
以上是我的服务并尝试为 catch 子句编写测试用例,而我的测试用例是
@test()
public void getExceptiontest() throws Exception {
RequestDto requestDto = new RequestDto();
requestDto.setPage("1");
AuthConfig authDTO = new AuthConfig();
authDTO.setUrl("Url");
Mockito.when(restTemplate.postForEntity(Mockito.anyString(),Mockito.any(),Mockito.any())).thenThrow((new Exception("Unauthorized")));
ResponseDTO response = restCallUtil.getData(requestDto);
assertNull(response);
}
我想要做的 incatch 块是,每当我遇到未经授权的异常时,我都会清除缓存并再次调用相同的方法。因此,为了从我的测试类中测试 catch 块,我试图抛出异常,消息为“未经授权”,但是当我运行测试用例时,我得到了
org.mockito.exceptions.base.MockitoException:
Checked 异常对该方法无效!
无效:java.lang.Exception:未经授权
解决方法
首先要注意的是 useEffect(() => {
fetch("/posts")
.then((res) => {
return res.json();
})
.then((data) => {
console.log(data);
setProducts(data);
});
},[]);
的实例不是 Exception
的实例是 checked 异常。因此,方法抛出泛型 RuntimeException
的唯一方法是方法签名包含“Exception
”或“throws Exception
”。
那么..你为什么会收到这个错误?您正在存根抛出 throws Throwable
的 postForEntity
方法,而 RestClientException
不是 Exception
的实例。因此,您的存根无效。
如果您想存根该方法以便输入通用案例的 catch 块,您将需要抛出一个 RestClientException
,它未选中,因此不受“抛出”限制。
也就是说,在原始方法中仅捕获 RestClientException 可能更明智。如果您想捕获某个 RuntimeException,那么您可能已经知道它是什么并专门捕获它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。