【发布时间】:2018-05-19 04:32:04
【问题描述】:
在 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 的 ApplicationContext 知识之外被调用(可能是newed up)。
有什么方法可以模拟自定义反序列化器,还是我需要通过@SpringBootTest 提升这个类以使用完整的 ApplicationContext 并让它完全执行?
【问题讨论】:
标签: java spring-boot mockito spring-test-mvc jackson-databind