Java 如何在Spring Boot 1.5.9中模拟自定义Jackson反序列化器响应
在Spring Boot 1.5.9项目中,我目前正尝试使用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
@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应该从注册中知道反序列化程序处理的类。