如何在 Spring Boot 1.5.9 中模拟自定义杰克逊反序列化程序响应



在 Spring Boot 1.5.9 项目中,我目前正在尝试使用@WebMvcTest对我的一个控制器运行测试。正在操作的实体在其属性之一上具有指向自定义类的@JsonDeserializer()注释。我试图在不调用正文的情况下模拟测试中deserialize()调用的结果。

但是,在尝试执行以下操作时,我在deserialize()方法中的一行上收到 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
}

我假设自定义反序列化程序类是在 Spring 的应用程序上下文知识之外被调用(可能new编辑的(。

有没有办法模拟自定义反序列化程序,或者我是否需要通过@SpringBootTest提升这个类以使用完整的应用程序上下文并让它完全执行?

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

否则,我假设杰克逊每次都会实例化你的类的新实例,并且根本不使用你的模拟(或豆子?(。

相关内容

  • 没有找到相关文章

最新更新