使用Mockito从List创建Json时如何抛出JsonProcessingException?

时间:2019-05-21 16:00:34

标签: java json unit-testing exception mockito

我正在尝试对测试块进行单元测试,以使用杰克逊将List转换为Json格式。这是我的代码:

   public String convert(List<POJO> list) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            data = objectMapper.writeValueAsString(list);
        } catch (JsonProcessingException exception) {
            System.out.println("Exception message: {}", exception.getMessage());
        }
        return data;
    }

我尝试过以这种方式进行单元测试:

@Mock
ObjectMapper mockObjectMapper;

@Test(expected = JsonProcessingException.class)
public void doThrowException() throws JsonProcessingException {
    doThrow(JsonProcessingException.class).when(mockObjectMapper).writeValueAsString(any());
    dataTransformer.convert(new ArrayList<>());
    verify(mockObjectMapper.writeValueAsString(any()));
}

我一直在努力争取覆盖所有单元测试。我查阅了几篇有关SO的文章,但没有运气。由于我是单元测试领域的新手,因此我感觉我肯定在这里遗漏了一些东西。

1 个答案:

答案 0 :(得分:1)

1)就实施而言,您的测试逻辑不正确。在实现中,您会捕获异常,因此在异常测试用例中,您将永远无法获得预期的异常。

2)如评论中所述,如果从类的客户端代码中看不到依赖项,则无法模拟ObjectMapper。在这里,它没有任何模拟类的方法。您可以添加一个构造函数或一个setter来进行设置,但这很有意义吗?

3)实际上,您不应该在这里嘲笑。被测组件将某些列表元素映射到字符串。您不希望模拟,而是在异常情况和名义情况下都测试映射逻辑。否则您的测试将没有太大的价值。
要获得JsonProcessingException,您可以从post的出色答案中获得启发。