【问题标题】:Create a JsonProcessingException创建一个 JsonProcessingException
【发布时间】:2015-05-27 06:18:09
【问题描述】:

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

when(mapper.writeValueAsString(any(Object.class))).thenThrow(new JsonProcessingException("Error"));

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

【问题讨论】:

  • 为什么不创建一个新类MyJsonProcessingException并继承JsonProcessingException类?
  • @R9J 为什么要创建一个不需要的类?

标签: java junit jackson mockito


【解决方案1】:

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

when(mapper.writeValueAsString(any(Object.class))).thenThrow(new JsonProcessingException("Error"){});

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

【讨论】:

  • 这可以解决问题(代码会编译),但同时会产生Checked exception is invalid for this method!。真正的解决方案将涉及在您的测试方法中扩展 ObjectMapper 并将其传递给 SUT
  • 我有点迷茫,后台在做什么?
  • @Robbo_UK 它创建了一个扩展 JsonProcessingException 的匿名类。 stackoverflow.com/questions/28073047/…
  • 虽然它可能在幕后做同样的事情,但 @albin-p-babu 建议的 doThrow/when 语法更简洁。
【解决方案2】:

改为抛出一个已知的直接子类怎么样?

v1.0

Direct Known Subclasses:
JsonGenerationException, JsonMappingException, JsonParseException

v2.0

Direct Known Subclasses:
JsonGenerationException, JsonParseException

【讨论】:

  • 完美运行!谢谢。
  • 这根本不起作用,也不应该。 JsonProcessingException 是受检异常,也就是说 JsonProcessingException 的所有子类也是受检异常
【解决方案3】:

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

doThrow(JsonProcessingException.class).when(mockedObjectMapper).writeValueAsString(Mockito.any());

【讨论】:

    【解决方案4】:

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

    when(mapper.writeValueAsString(any(Object.class)))
        .thenThrow(mock(JsonProcessingException.class));
    

    【讨论】:

      【解决方案5】:

      今天遇到了同样的问题。您可以使用:

      Mockito.when(mockObjectMapper.writeValueAsString(Mockito.any())).thenThrow(JsonProcessingException.class);
      

      【讨论】:

        【解决方案6】:

        尝试使用thenAnswer并从JsonProcessingException创建一个匿名类

        when(mapper.writeValueAsString(any(Object.class))).thenAnswer(x-> {throw new JsonProcessingException(""){};});
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-05
          • 1970-01-01
          • 1970-01-01
          • 2012-06-19
          相关资源
          最近更新 更多