1

我有一个春天启动的项目,1.5.4版配置类,用MongoDB的配置类:春季启动1.5.4:排除单元测试

@Configuration 
public class MongoConfig { 

@Value("${spring.data.mongo.client.uri:mongodb://localhost:27017/database}") 
private String mongoURI; 

@Bean 
public MongoDbFactory mongoFactory() throws UnknownHostException{ 
    return new SimpleMongoDbFactory(new MongoClientURI(mongoURI)); 
} 

@Bean 
public MongoTemplate mongoTemplate() throws UnknownHostException, MongoException{ 
    return new MongoTemplate(mongoFactory()); 
} 
} 

在我的集成测试,我想使用嵌入式蒙戈https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo)。

的问题是,嵌入式蒙戈的initialitation前MongoDB的配置类开始,并尝试连接到数据库,所以我的测试失败。如果我删除了MongoConfig类,所有测试都很好。

我怎么能排除它只是在我的测试执行?

+0

我知道这是不是你的问题是什么,但看看testContainers:https://www.testcontainers.org/这是解决方案,我用我的测试(主要是集成测试),一个小教程在这里:https://areguig.github.io/test-springboot-apps-using-testContainers-and-spock/ –

回答

1

请在这里参考的答案。它有两种排除配置的方法。

Spring boot: apply @Configuration to certain package only

更新1:

或者,我能想到的最有效的方法是使用Spring配置文件并加载配置文件进行测试

定义您TestConfiguration类将它导入您的测试课程。

@RunWith(SpringRunner.class) 
@SpringBootTest 
@Import(MyTestConfiguration.class) 
public class MyTests { 

    @Test 
    public void exampleTest() { 
     ... 
    } 

} 

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-detecting-config

更新2: 对于EmbeddedMongoAutoConfiguration请在这里参考了详细的解答。

How do you configure Embedded MongDB for integration testing in a Spring Boot application?

+0

我不想改变我的主要应用程序类的单元测试。 – sintetico82

+0

@Import(MyTestsConfiguration.class)是很好的解决方案,但我发现了一个系统,只是避免负载无用类为我的测试。 – sintetico82

+0

的proble是,我不知道该怎么做我的* MyTestsConfiguration.class *,becouse我想激活* EmbeddedMongoAutoConfiguration.class * – sintetico82

0

我这个配置解决它在我的测试类:

@RunWith(SpringRunner.class) 
@ComponentScan({"it.app.server.dal","it.app.server.listener"}) 
@DataMongoTest() //mongoDB 
public class ListenerTests { 
    ... 
} 

注解@DataMongoTest()加载我Embbedded的MongoDB,并与@ComponentScan我可以只加载服务和存储库,我需要在我的测试。

+0

如果我想测试访问MongoDB的一个控制器此解决方案不起作用。 – sintetico82