如何使用 Jackson 获取 JsonProcessingException

新手上路,请多包涵

可能是一个奇怪的问题,但实际上我想对我的测试进行更多的覆盖,尽管我针对 JsonProcessingException 进行了编码,但我无法创建生成此异常的有效负载,也许是因为 Jackson 非常聪明并将所有内容转换为字符串,即使对于错误的字符串,它也会绕过 JSON 规范。我的问题是杰克逊相当不错 :)

我基本上想要一个有效载荷,当我运行它时,它会破坏 JsonProcessingException

 String jsonPayload = objectMapper.writeValueAsString(payload);

我试过一些像:

 HashMap<String, String> invalidJSONPayload= new HashMap<>();

invalidJSONPayload.put("021",021);
invalidJSONPayload.put("---",021);
invalidJSONPayload.put("~",021);

我对类型不感兴趣,所以请随意推荐另一种类型。例如,一个空对象抛出 JsonMappingException 我也已经抓住了那个。

原文由 bitoiu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
1 个回答

我想做同样的事情,并最终通过使用 Mockito 的“间谍”功能实现了它,该功能用模拟对象包装了真实对象。所有对模拟对象的调用都会转发给真实对象,除了那些你试图模拟的。例如:

 ObjectMapper om = Mockito.spy(new ObjectMapper());
Mockito.when( om.writeValueAsString(ErrorObject.class)).thenThrow(new JsonProcessingException("") {});

om 的所有用法都将由底层 ObjectMapper 实例处理,直到 ErrorObject 的实例被传入,此时 JsonProcessingException 将被抛出。

新的 JsonProcessingException 被创建为匿名类,因为它是受保护的类并且只能实例化子类。

原文由 Lee Passey 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题