gpt4 book ai didi

java - 使用 Mockito 从列表创建 Json 时如何抛出 JsonProcessingException?

转载 作者:行者123 更新时间:2023-12-02 09:52:09 24 4
gpt4 key购买 nike

我正在尝试使用 jackson 对 catch block 进行单元测试以将 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)您的测试逻辑在实现方面不正确。在实现中,您捕获了异常,因此在异常测试用例中,您永远不会按预期得到它。

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

3)确实你不应该在这里 mock 。被测试的组件将一些列表元素映射到字符串。您不想模拟,而是在异常情况和名义情况下测试映射逻辑。否则你的测试不会有很大的值(value)。
要获得JsonProcessingException,您可以从这个post的优秀答案中得到启发。 。

关于java - 使用 Mockito 从列表创建 Json 时如何抛出 JsonProcessingException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56242217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com