gpt4 book ai didi

java - 如何将自定义转换器与@DataMongoTest 一起使用?

转载 作者:可可西里 更新时间:2023-11-01 09:16:23 24 4
gpt4 key购买 nike

我有一个实例化一些实体的测试,将它们保存到 MongoDB 并再次加载它们以确保映射正确工作。我想在测试类上使用 @DataMongoTest 注释来确保动态创建嵌入式 MongoDB 实例。

在我不得不为某些类引入自定义转换器 (org.springframework.core.convert.converter.Converter) 之前,这一切都很好。这些是这样设置的:

@ReadingConverter
public class MyClassReadConverter implements Converter<Document, MyClass> {
...

@WritingConverter
public class MyClassWriteConverter implements Converter<MyClass, Document> {
...

@Configuration
public class SpringMongoSetup extends AbstractMongoConfiguration {
@Override
public Mongo mongo() throws Exception {
//I don't want that in the test..
return new MongoClient("localhost");
}

@Override
public CustomConversions customConversions() {
// ..but I need this
List<Converter<?,?>> converters = new ArrayList<>();
converters.add(new MyClassWriteConverter());
converters.add(new MyClassReadConverter());
return new CustomConversions(converters);
}
...

对于正常(非测试)执行,这工作得很好。如果我使用使测试使用我的配置的 @SpringBootTest 注释,该测试也有效。不幸的是,此配置还定义了 MongoDB 的主机/端口,但我想使用由 @DataMongoTest 启动的嵌入式 MongoDB 的主机/端口。

我能否以某种方式配置它,以便 @DataMongoTest 使用带有嵌入式 MongoDB 的自定义转换器,或者我可以在实例化我的配置类时获取嵌入式主机/端口?

最佳答案

要将 CustomConverters@DataMongoTest 一起使用,您需要将这些转换器公开为 Spring bean,例如:

@Configuration 
public class CustomConversionsConfiguration {

@Bean
public CustomConversions customConversions() {
List<Converter<?,?>> converters = new ArrayList<>();
converters.add(new MyClassWriteConverter());
converters.add(new MyClassReadConverter());
return new CustomConversions(converters);
}

}

...并在 Mongo 测试类中使用配置:

@RunWith(SpringRunner.class)
@DataMongoTest
@Import(CustomConversionsConfiguration.class)
public class MyMongoTest { ... }

关于java - 如何将自定义转换器与@DataMongoTest 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com