【发布时间】:2017-06-24 23:38:36
【问题描述】:
我有一个实例化一些实体的测试,将它们保存到 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 的自定义转换器,或者我可以在实例化我的配置类时获取嵌入式主机/端口?
【问题讨论】:
-
为这个老问题提供更多背景信息 - 有没有办法分离连接字符串和 mongo 转换器配置?在使用可能的内存数据库进行测试期间,您可以有一个没有另一个吗?还是必须与真实数据库进行集成测试?
标签: java spring mongodb spring-boot spring-data-mongodb