单元测试中的 ObjectMapper 实例

在我的 SpringBoot 应用程序中,我的 ObjectMapper 对象是自动装配的,并包含按预期注册的模块

https://img4.mukewang.com/64c36c000001041705340362.jpg

我的代码:


https://img4.mukewang.com/64c36c0d00018cad04480289.jpg

并测试:

https://img1.mukewang.com/64c36c1b0001a73b05840368.jpg

现在在单元测试部分(使用 MockitoJUnitRunner)我无法使用 ObjectMapper 实例,注册的模块为空:

https://img.mukewang.com/64c36c2800018a0606120266.jpg

即使我添加 mapper.findAndRegisterModules() ,注册的模块也为空,并且我的日期反序列化失败。

  1. 为什么代码和单元测试中的行为不一样?

  2. 如何在我的单元测试中注册相同的模块?


收到一只叮咚
浏览 140回答 2
2回答

犯罪嫌疑人X

使用实用程序类将模块注册到ObjectMapper实例。public static ObjectMapper newObjectMapper() {    final ObjectMapper objectMapper = new ObjectMapper();    return configureObjectMapper(objectMapper);}然后在实际代码和测试用例中使用此方法以避免不同的行为。ObjectMapper这样,无论是测试代码还是实际代码,您都可以在应用程序的任何位置保持一致。public static ObjectMapper configureObjectMapper(final ObjectMapper objectMapper) {    return objectMapper            .registerModule(new LocaleModule())            .registerModule(new DateTimeDeserializationModule())            .registerModule(new DateTimeSerializationModule())            .registerModule(new JavaMoneyModule())            .setSerializationInclusion(JsonInclude.Include.NON_NULL);}

梦里花落0921

作为第一次下注,您可以致电:   mapper.registerModule(new ParameterNamesModule())          .registerModule(new Jdk8Module())          .registerModule(new JavaTimeModule());“查找”部分实际上使用 ServiceLoader 机制,并且正如文档所述,这被认为可能是昂贵的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java