Spring Boot测试中如何连接嵌入式MongoDB?
解决嵌入式MongoDB测试连接问题
1. 限制生产Mongo配置的生效环境
如果你的生产Mongo配置类(带@Configuration注解)未指定生效范围,测试时会被加载并连接生产库。给生产配置添加@Profile("!test"),让它在测试环境中自动失效:
@Configuration @Profile("!test") public class ProductionMongoConfig { // 生产环境Mongo配置代码 }
2. 配置测试环境专属配置文件
在src/test/resources下创建application-test.properties,明确指定嵌入式MongoDB的连接参数,覆盖生产配置:
# 嵌入式MongoDB默认端口为27017,可自定义端口 spring.data.mongodb.uri=mongodb://localhost:27017/test_embedded_db # 也可拆分配置 # spring.data.mongodb.host=localhost # spring.data.mongodb.port=27017 # spring.data.mongodb.database=test_embedded_db
3. 给测试类指定激活测试环境
在测试类上添加@ActiveProfiles("test"),确保加载测试专属配置文件:
@DataMongoTest @ActiveProfiles("test") public class MongoDbSpringIntegrationTest { // 原有测试代码保持不变 }
4. 排除冲突的自动配置类
若上述步骤仍无效,可在@DataMongoTest中排除可能加载生产Mongo连接的自动配置类:
@DataMongoTest(excludeAutoConfiguration = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) @ActiveProfiles("test") public class MongoDbSpringIntegrationTest { // 原有测试代码保持不变 }
5. 确认依赖配置正确性
再次检查de.flapdoodle.embed.mongo依赖的scope是否为test,确保仅在测试环境生效,不干扰生产:
<dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo</artifactId> <version>4.11.1</version> <scope>test</scope> </dependency>
内容的提问来源于stack exchange,提问作者K.Ozbek
相关产品推荐
相关产品推荐

