Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring Boot 1.5.9中模拟自定义Jackson反序列化器响应_Java_Spring Boot_Mockito_Spring Test Mvc_Jackson Databind - Fatal编程技术网

Java 如何在Spring Boot 1.5.9中模拟自定义Jackson反序列化器响应

Java 如何在Spring Boot 1.5.9中模拟自定义Jackson反序列化器响应,java,spring-boot,mockito,spring-test-mvc,jackson-databind,Java,Spring Boot,Mockito,Spring Test Mvc,Jackson Databind,在Spring Boot 1.5.9项目中,我目前正尝试使用@WebMvcTest对我的一个控制器运行测试。正在操作的实体的一个属性上有一个指向自定义类的@jsondesializer()注释。我试图在测试中模拟反序列化()调用的结果,而不调用主体 但是,当尝试执行以下操作时,我在反序列化()方法中的一行上收到一个NullPointerException错误,这表明实际的方法体正在执行: @Autowired private MockMvc mvc; @MockBean private MyDe

在Spring Boot 1.5.9项目中,我目前正尝试使用
@WebMvcTest
对我的一个控制器运行测试。正在操作的实体的一个属性上有一个指向自定义类的
@jsondesializer()
注释。我试图在测试中模拟
反序列化()
调用的结果,而不调用主体

但是,当尝试执行以下操作时,我在
反序列化()
方法中的一行上收到一个NullPointerException错误,这表明实际的方法体正在执行:

@Autowired
private MockMvc mvc;
@MockBean
private MyDeserializer myDeserializer
[...]
@Test
public void myTestMethod() {
  doReturn(myDeserializedValue)
      .when(myDeserializer)
      .deserialize(
          any(JsonParser.class),
          any(DeserializationContext.class)
      );
  this.mvc.perform([...]) // perform mvc call that would invoke myDeserializer
  logger.debug("Call complete"); // never gets to this line
}
我假设正在调用自定义反序列化器类(可能是
new
ed-up),这超出了Spring的ApplicationContext的知识范围


有没有办法模拟自定义反序列化程序,或者我需要通过
@springbootest
将该类升级以使用完整的ApplicationContext并让它完全执行?

如果您希望Jackson使用特定的反序列化程序对象实例,则需要通过ObjectMapper实例上的模块注册它。有关序列化程序的示例,请参见;对于反序列化程序,您必须稍微修改它


否则,我假设Jackson每次都会实例化一个新的类实例,而从不使用你的mock(或bean?)。

不幸的是,在安装方法中注册反序列化器并使用映射器时,我仍然会遇到同样的错误。建议不必添加通过
@JsonDeserialize()
指定的反序列化程序,这让我想知道您是否不能如此轻松地重写它。也许可以尝试删除类上的注释?Jackson应该从注册中知道反序列化程序处理的类。