java - 如何触发 Java 单元测试的 JsonProcessingException?
问题描述
我在一个名为“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 是来自名为“MessageProcessResults”的类的 ConcurrentHashMap>。它看起来像这里它循环遍历 keySet 并在 httpResponse 参数内插入 Key Value 对的字符串。
我尝试在 mapper 上使用 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);
编辑:请注意,这假设您正在使用依赖注入并将模拟ObjectMapper
注入到您的对象中,这是使这种情况可测试的必要条件。
推荐阅读
- r - “证书链是由不受信任的机构颁发的” - 使用 RVest 时出错
- javascript - 无限平铺网页
- r - 当矩阵包含许多小条目时,base::chol() 会变慢
- python - Tkinter 部分点击通过?(仅限 Windows)
- css - 悬停时两个不同元素的转换延迟反转
- python - 将千位逗号分隔符添加到 Relplot
- python - 使用 Python 中的带阻滤波器滤除频率范围,并使用傅里叶变换 FFT 确认
- android - 无法使用 Fastlane 上传 aab/apk 来玩商店
- java - GraalVM native-image -H:ConfigurationFileDirectories 文件的文档
- php - PHP curl - 存在错误时获取响应标头?