【问题标题】:How to write unit test for ObjectMapper.writeValueAsString(object) which returns IOException如何为返回 IOException 的 ObjectMapper.writeValueAsString(object) 编写单元测试
【发布时间】:2019-08-11 06:38:46
【问题描述】:

我正在为ObjectMapper().writeValueAsString(object) 编写单元测试。 我有一个捕获 IOException 的 catch 块。 我需要对这个 catch 块进行单元测试。

我需要知道IOException在哪种情况下被ObjectMapper返回。

要抛出JsonProcessingException,我已经找到answer

但是我没有发现任何抛出 IOException 的场景。

 protected void logJsonForMetrics(final Logger logger,
                                     final Object object)
    {
        try
        {
            final String jsonString = new ObjectMapper().writeValueAsString(object);
            logger.info(jsonString);
        }
        catch (final JsonProcessingException e)
        {
            LOGGER.error("Unable to create a json object" + e);
        }
        catch (final IOExcepton e)
        {
            LOGGER.error("Error while logging metric " + e);
        }
    }

我想要一个返回 IOException 的场景。

【问题讨论】:

    标签: java objectmapper


    【解决方案1】:

    这个writeValueAsString() 很可能不会抛出IOException,因为它在内部使用StringWriter 来写入值。来自documentation

    [...] 功能上等同于用StringWriter 调用writeValue(Writer,Object) 并构造String [...]

    如果您想检查IOExceptions,您需要改用writeValue() 方法并提供Writer 对象,该对象将抛出IOException

    请记住,IOException "throws" 语句已从 writeValueAsString() 中删除,从 2.1 版开始(很可能是因为不再抛出此异常)。

    【讨论】:

      【解决方案2】:

      注意:在 jackson-databind 2.1 版之前,writeValueAsString() 方法 throws 子句包含 IOException; 2.1 去掉了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多