如何解决集成测试中忽略了 Spring Boot 自定义 JSON 序列化器
我有一个 spring boot 应用程序,它有自定义的 Json Serializer/Deserializer,它被注册为这样的 bean:
public class JsonSerializationComponent extends SimpleModule {
public JsonSerializationComponent() {
super("MySerializationModule");
addSerializer(Instant.class,new InstantSerializer());
addDeserializer(Instant.class,new InstantDeserializer());
addSerializer(Hash.class,new HashSerializer());
addDeserializer(Hash.class,new HashDeserializer());
addDeserializer(DateTime.class,new DateTimeDeserializer());
addDeserializer(DMRestVolumeTime.class,new DMRestVolumeTimeDeserializer());
}
}
运行应用程序时,这按预期工作。
问题是当我运行集成测试时。我使用 Mock webAppContext 和以下测试设置:
@RunWith(SpringJUnit4ClassRunner.class)
@EnableWebMvc
@WebAppConfiguration
@ContextConfiguration(
classes = {
MyTestConfig.class
},initializers = {
ConfigDataApplicationContextinitializer.class
})
@ActiveProfiles({"test"})
public class MyIntegrationTest {
@Autowired
private WebApplicationContext webApplicationContext;
private String volumeId;
@Before
public void setup() throws Exception {
this.mockmvc = mockmvcBuilders.webAppContextSetup(this.webApplicationContext).build();
}
@Test
public void mytest() throws Exception {
mockmvc.perform(get("/someEndpoint"))
.andDo(print())
.andExpect(status().isOk());
... more testing code here
}
...
}
尽管它已在 Spring 上下文中注册(已使用调试器进行了验证),但在将响应发送回测试客户端时,spring 控制器并未使用自定义 JSON Serializer/Deserializer。
我意识到以这种方式设置测试提供了一个简化的 Spring 环境(当使用这个 Mock 设置而不是使用 @SpringBoottest
时)。我这样做是为了让测试运行得更快一点,而且没有那么多内存使用。
如何让测试使用 JSON Serializer/Deserializer 与此设置?这可能吗?
注意:如果我将测试注释更改为:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBoottest(classes = MyApplication.class)
@WebAppConfiguration
@Import(MyTestConfiguration.class)
@Rollback
@Transactional
正如我所提到的,这会启动一个我试图避免的完整的 spring 应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。