我在一个名为“HttpResponseHelper”的类中有一个方法,当它抛出 JsonProcessingException 时,我试图对其进行单元测试,但我很难让它这样做:
private static void populateHTTPResponseWithData(ObjectNode httpResponse)
{
ObjectMapper mapper = new ObjectMapper();
responseMapData.keySet().forEach(item -> {
try
{
httpResponse.put(item, mapper.writeValueAsString(responseMapData.get(item)));
}
catch (JsonProcessingException e)
{
LOGGER.error("Json Processing Exception", e);
}
});
}
httpResponse 参数是 ObjectNode 类型(Jackson 库),然后在方法体内从 ObjectMapper 类创建映射器对象。
resonseMapData 是一个 ConcurrentHashMap>,来自名为“MessageProcessResults”的类。看起来这里循环遍历 keySet 并在 httpResponse 参数内插入一个字符串作为键值对。
我尝试在映射器上使用mockito返回格式错误的JSON,但看起来它会将值写入字符串并每次都会传递。
有人有任何建议或者有简单的方法吗?感谢您花时间阅读这个问题并可能帮助我:D
最佳答案
您还可以为您的测试扩展JsonProcessingException
:
private static class MockJsonProcessingException extends JsonProcessingException {
public MockJsonProcessingException(String message) {
super(message);
}
}
然后在您的测试中:
var exception = new MockJsonProcessingException("Because of protected constructors");
when(objectMapper.writeValueAsString(thing)).thenThrow(exception);
编辑:请注意,这假设您正在使用依赖项注入(inject)并将模拟 ObjectMapper
注入(inject)到您的对象中,这是使此案例可测试所必需的。
关于java - Java单元测试如何触发JsonProcessingException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60215718/