可能是一个奇怪的问题,但确实我想在测试中获得更多的覆盖范围,尽管我是根据JsonProcessingException
编码的,但我无法创建会产生此异常的有效负载,也许是因为Jackson很聪明,并将所有内容都转换为字符串,甚至对于错误的字符串,它都围绕着JSON规范。我的问题是 jackson 相当出色:)
我基本上想要一个有效载荷,当我运行它时,它会与JsonProcessingException
一起中断:
String jsonPayload = objectMapper.writeValueAsString(payload);
我已经尝试过类似的方法:
HashMap<String, String> invalidJSONPayload= new HashMap<>();
invalidJSONPayload.put("021",021);
invalidJSONPayload.put("---",021);
invalidJSONPayload.put("~",021);
我对这种类型不感到困惑,所以随时建议另一个。例如,一个空对象会抛出
JsonMappingException
,我也已经捕获了该对象。 最佳答案
我想做同样的事情,并最终通过使用Mockito的“ spy ”函数来完成它,该函数将真实对象与模拟对象包装在一起。对模拟对象的所有调用都会转发到真实对象,但您尝试模拟的对象除外。例如:
ObjectMapper om = Mockito.spy(new ObjectMapper());
Mockito.when( om.writeValueAsString(ErrorObject.class)).thenThrow(new JsonProcessingException("") {});
底层对象ObjectMapper实例将处理
om
的所有用法,直到传入ErrorObject
实例为止,此时将抛出JsonProcessingException
。新的
JsonProcessingException
被创建为一个匿名类,因为它是一个 protected 类,并且只能实例化一个子类。