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

Java 如何在使用Mockito从列表创建Json时抛出JsonProcessingException?,java,json,unit-testing,exception,mockito,Java,Json,Unit Testing,Exception,Mockito,我正在尝试使用jackson对catch块进行单元测试,以将列表转换为Json格式。这是我的密码: public String convert(List<POJO> list) { ObjectMapper objectMapper = new ObjectMapper(); try { data = objectMapper.writeValueAsString(list); } catch (JsonP

我正在尝试使用jackson对catch块进行单元测试,以将列表转换为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;
    }
公共字符串转换(列表){
ObjectMapper ObjectMapper=新的ObjectMapper();
试一试{
data=objectMapper.writeValueAsString(列表);
}捕获(JsonProcessingException异常){
System.out.println(“异常消息:{}”,Exception.getMessage());
}
返回数据;
}
我尝试过这样的单元测试:

@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()));
}
@Mock
对象映射器模拟对象映射器;
@测试(预期为JsonProcessingException.class)
public void doThrowException()引发JsonProcessingException{
doThrow(JsonProcessingException.class).when(mockObjectMapper.writeValueAsString(any());
convert(新的ArrayList());
验证(mockObjectMapper.writeValueAsString(any()));
}
我一直在努力让我的头脑去全面覆盖这个单元测试。我查了好几篇关于这个的文章,但是运气不好。由于我是单元测试领域的新手,我有一种感觉,我在这里肯定遗漏了一些东西。

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

2) 如注释中所述,如果依赖项在类的客户端代码中不可见,则不能模拟
ObjectMapper
。在这里,它没有任何方式来嘲弄这个班级。您可以添加一个构造函数或setter来设置它,但这有意义吗

3) 的确,你不应该在这里嘲笑。被测组件将一些列表元素映射到字符串。您不想模拟,而是在异常情况和标称情况下测试映射逻辑。否则,您的测试将不会有很大的价值。

要获得
JsonProcessingException
,您可以从这篇文章的优秀答案中得到启发

在方法中创建新实例时,不能模拟objectmapper。需要传入/注入是的,我理解。但在这种情况下,如何测试异常呢。我不确定将生成什么类型的输入
jsonprocessingexception
。有什么建议吗?我想我通过抛出JsonProcessingException解决了覆盖率问题。你是如何做到的?我已更新以回答您的第一条评论。我现在不是捕获异常,而是抛出异常。这里唯一的问题是,我必须在所有调用此方法的方法中抛出异常。这样,单元测试覆盖率为100%