创建一个JsonProcessingException

pez*_*pez 19 java junit mockito jackson

我正在尝试创建一个由模拟对象抛出的JsonProcessingException.

when(mapper.writeValueAsString(any(Object.class))).thenThrow(new JsonProcessingException("Error"));
Run Code Online (Sandbox Code Playgroud)

但是我无法创建JsonProcessingException对象,因为所有构造函数都受到保护.我该如何解决这个问题?

小智 24

如何创建JsonProcessingException类型的匿名异常

when(mapper.writeValueAsString(any(Object.class))).thenThrow(new JsonProcessingException("Error"){});
Run Code Online (Sandbox Code Playgroud)

{}大括号可以解决问题.这样做要好得多,因为它不会让测试代码的读者感到困惑.

  • 这可以解决问题(代码将编译),但同时会导致“此方法的Checked异常无效!”。真正的解决方案将涉及在测试方法中扩展ObjectMapper并将其传递给SUT (2认同)
  • @Robbo_UK 它创建一个扩展“JsonProcessingException”的匿名类。/sf/ask/1965113321/ (2认同)

Jos*_*nez 16

如何投掷一个已知的直接子类呢?

对于v1.0

Direct Known Subclasses:
JsonGenerationException, JsonMappingException, JsonParseException
Run Code Online (Sandbox Code Playgroud)

对于v2.0

Direct Known Subclasses:
JsonGenerationException, JsonParseException
Run Code Online (Sandbox Code Playgroud)


Alb*_*bin 8

这个对我有用,它允许自己抛出 JsonProcessingException

doThrow(JsonProcessingException.class).when(mockedObjectMapper).writeValueAsString(Mockito.any());
Run Code Online (Sandbox Code Playgroud)


小智 8

我今天也遇到了这个问题。我想出的最简单、最干净的解决方案是创建并抛出一个模拟 JsonProcessingException

when(mapper.writeValueAsString(any(Object.class)))
    .thenThrow(mock(JsonProcessingException.class));
Run Code Online (Sandbox Code Playgroud)