Stub期间不会抛出模拟异常

问题描述 投票:0回答:1

我有一个需要模拟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(*_)
java unit-testing groovy mocking spock
1个回答
0
投票

也许您误解了模拟的工作原理。被测类通过方法内部的ObjectMapper创建自己的new。这意味着您不能在测试期间注入模拟来替换它。因此,您需要重构以便使您的代码可测试。如果无法注入测试,则在测试中创建模拟并不能神奇地使被测类使用它。

此外,如果您想让ObjectMapper模拟程序引发异常,则只需引发异常。也无需模拟异常。在您的上下文中这样做没有任何意义。

此外,您的问题可能会有所改善。我建议提供一个完整的测试课程,包括。包裹名称和进口。还请提供被测代码。我只能通过读取测试来猜测被测类在做什么,例如,如果没有抛出异常,则调用某些神秘服务对象的buildRequestAndPublish方法。 not确实发生了,这似乎是您要测试的内容,但我只能推测。

如果您不理解我的回答,请随时提出后续问题。

P.S .:如果您编辑问题以将其转换为MCVE,我保证还会用针对您问题的具体解决方案来更新我的答案。

© www.soinside.com 2019 - 2024. All rights reserved.