我有一个需要模拟JsonPropertiesException
的测试,但我不知道为什么它会继续进行
这是我的方法:
publish void publishEvent() {
String topicMessage = "";
try {
topicMessage = new ObjectMapper().writeValueAsString(publishEventDto);
} catch (JsonProcessingException e) {
log.error("publishEvent() JsonProcessingException: " + e.getMessage());
}
}
这是我的测试用例,不会引发异常::(
ObjectMapper mapper = Mock(ObjectMapper)
mapper.writeValueAsString(publishEventDto) >> {throw Mock(JsonProcessingException) }
String expectedMessage = mapper
when:
publisher.publishEvent()
then:
0 * snsService.buildRequestAndPublish(*_)
也许您误解了模拟的工作原理。被测类通过方法内部的ObjectMapper
创建自己的new
。这意味着您不能在测试期间注入模拟来替换它。因此,您需要重构以便使您的代码可测试。如果无法注入测试,则在测试中创建模拟并不能神奇地使被测类使用它。
此外,如果您想让ObjectMapper
模拟程序引发异常,则只需引发异常。也无需模拟异常。在您的上下文中这样做没有任何意义。
此外,您的问题可能会有所改善。我建议提供一个完整的测试课程,包括。包裹名称和进口。还请提供被测代码。我只能通过读取测试来猜测被测类在做什么,例如,如果没有抛出异常,则调用某些神秘服务对象的buildRequestAndPublish
方法。 not确实发生了,这似乎是您要测试的内容,但我只能推测。
如果您不理解我的回答,请随时提出后续问题。
P.S .:如果您编辑问题以将其转换为MCVE,我保证还会用针对您问题的具体解决方案来更新我的答案。