java - Java单元测试如何触发JsonProcessingException?

标签 java unit-testing jackson jsonexception

我在一个名为“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/

相关文章:

java - 如何使用Java+Struts2在浏览器中打开Excel工作表?

java - 在 DataStore JPA java-App 引擎中加入查询

python - 一段python代码如何判断它是否在unittest下运行

c# - 从 MVC 4 C# Controller 测试 JSON 结果

java - 如何使用 Spock 测试单个类的 Logger?

java - 如何制作不会更新的 JPanel 背景?

c# - Linq2Sql 测试

java - Jackson ObjectMapper 冲突的 setter 定义(Android.Graphics.Bitmap)

java - 如何在 Jackson Mapper 的帮助下使用单个 JSON 文件创建多种类型的 Java 对象?

java - 使用 Jackson 合并两个 JSON 文档