mockito 编写Junit以覆盖catch块

cwdobuhd  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(202)

我已经研究了很多,但无法找到合适的解决方案,
我在服务类中有一个调用消费者的方法,如下所示

try {
        snsProducer.send(message);
    } catch (JsonProcessingException jpe) {
        throw new SnSException(
                "Could not parse Message to publish to SNS");
    }

我试图通过测试用例覆盖catch块,但仍然不成功。
这是我尝试过的

@Test
void snsTest() {
   
    when(service.doCreate(message)).thenThrow(new JsonProcessingException("Json Processing Error"){});
    assertThrows(SnSException.class,()-> service.doCreate(message));
}

但这会引发Checked exception is invalid for this method!
我也试过这个

when(service.doCreate(message)).thenThrow(new JsonProcessingException("Exception"){});
        assertThrows(SnStateException.class,()-> service.doCreate(message));

但这会引发错误Expected SnSException to be thrown, but nothing was thrown.
完成测试用例

@Test
void doCreateTest(){
String id = RandomStringUtils.randomAlphanumeric(20);
Subscription subscription = testUtils.createEntity(sId,RandomStringUtils.randomAlphanumeric(20));
Manifest manifest = new Manifest();
manifest.setCommon(new Common());
doReturn(manifest).when(manifestUtils).getManifestWithLatestVersion(any());
when(service.doCreate(subscription)).thenThrow(new JsonProcessingException("Exception"){});
assertThrows(SnSException.class,()-> service.doCreate(subscription));
}

我不知道我做错了什么,任何帮助都将不胜感激

mrwjdhj3

mrwjdhj31#

从您的代码中,我可以看到snsProducer.send(message)正在抛出已检查的异常JsonProcessingException。因此,when().thenThrow()应该围绕它编写。

@Test
    void snsTest() {
       
        when(snsProducer.send(message)).thenThrow(new JsonProcessingException("Json Processing Error"){});
        assertThrows(SnSException.class,()-> service.doCreate(message));
    }

相关问题