微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用来自 Mockito Junit 测试的自定义消息引发异常

如何解决使用来自 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 ThrowablepostForEntity 方法,而 RestClientException 不是 Exception 的实例。因此,您的存根无效。

如果您想存根该方法以便输入通用案例​​的 catch 块,您将需要抛出一个 RestClientException,它未选中,因此不受“抛出”限制。

也就是说,在原始方法中仅捕获 RestClientException 可能更明智。如果您想捕获某个 RuntimeException,那么您可能已经知道它是什么并专门捕获它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?