如何在Quarkus中创建用于测试的嵌入式MongoDB数据库?
解决方案
1. 优先使用Quarkus官方MongoDB测试组件(推荐)
步骤1:引入测试依赖
Maven 依赖配置:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-test-mongodb</artifactId> <scope>test</scope> </dependency>
Gradle 依赖配置:
testImplementation "io.quarkus:quarkus-test-mongodb"
步骤2:清理无效测试配置
删除test/resources/application.properties里你手动编写的quarkus.mongodb.connection-string配置行,Quarkus测试组件会自动启动MongoDB实例、自动注入可用的连接串,不需要手动指定端口。
步骤3:适配低版本Quarkus
如果你的Quarkus版本低于2.8,需要在测试类上手动添加测试资源注解:
@QuarkusTest @QuarkusTestResource(MongoDBTestResource::class) // 新增这行 @TestMethodOrder(MethodOrderer.OrderAnnotation::class) class ControllerTest { // 原有代码保持不变 }
2. 无Docker环境使用嵌入式MongoDB方案
如果你本地没有Docker环境,不想用Testcontainers启动MongoDB容器,可以用flapdoodle嵌入式MongoDB:
步骤1:引入依赖
<dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo</artifactId> <version>4.12.0</version> <scope>test</scope> </dependency>
步骤2:补充测试配置
在test/resources/application.properties中添加配置:
%test.quarkus.mongodb.connection-string=mongodb://localhost:19345/db-test quarkus.mongodb.database=db-test # 指定嵌入式Mongo启动端口为19345,和你的连接串配置对齐 de.flapdoodle.mongodb.embedded.port=19345
3. 代码检查项
你现在的MockAccountRepository上的@Mock注解如果是用来替代生产环境的AccountRepository实现,需要确认生产环境的Repository没有加@Primary等高优先级注解,避免测试时注入错误的实现。
内容的提问来源于stack exchange,提问作者Biscuit
相关产品推荐
相关产品推荐

