我正在尝试对测试块进行单元测试,以使用杰克逊将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的文章,但没有运气。由于我是单元测试领域的新手,因此我感觉我肯定在这里遗漏了一些东西。
答案 0 :(得分:1)
1)就实施而言,您的测试逻辑不正确。在实现中,您会捕获异常,因此在异常测试用例中,您将永远无法获得预期的异常。
2)如评论中所述,如果从类的客户端代码中看不到依赖项,则无法模拟ObjectMapper
。在这里,它没有任何模拟类的方法。您可以添加一个构造函数或一个setter来进行设置,但这很有意义吗?
3)实际上,您不应该在这里嘲笑。被测组件将某些列表元素映射到字符串。您不希望模拟,而是在异常情况和名义情况下都测试映射逻辑。否则您的测试将没有太大的价值。
要获得JsonProcessingException
,您可以从post的出色答案中获得启发。