首页 > 解决方案 > 如何触发 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

标签: javaunit-testingjacksonjsonexception

解决方案


您还可以扩展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注入到您的对象中,这是使这种情况可测试的必要条件。


推荐阅读