我希望100%覆盖使用Jackson JSON覆盖方法toString。
@Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
logger.error(e.getMessage());
return "";
}
}
我可以进行一项测试,可以覆盖除catch块之外的大部分代码。
@Test
public void testToString() {
TestClass testClass = new TestClass();
String expected = "{\"testAttr\":null}";
assertEquals(expected, testClass.toString());
}
我怎样才能进行涵盖catch区块的测试?
答案 0 :(得分:0)
当然你冷却尝试以某种方式触发该异常,将封闭对象设置为某种奇怪的状态。但实现完整代码覆盖的更好方法是模拟映射器并使其抛出所需的异常。通常,您需要的步骤是:
理论上你可以手动创建假的ObjectMapper,例如通过创建它的子类,但这不是推荐的方式。我建议使用模拟框架。模拟框架允许您表达“当调用方法A然后抛出异常B”之类的内容。
答案 1 :(得分:0)
when(mapper.writeValueAsString(any(Object.class))).thenThrow(new JsonProcessingException("Error"){});
并且也很有帮助link