You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus中@QuarkusTest启动未用到的Testcontainers问题排查

问题原因分析
  • 全局配置触发自动启动:如果application-test.properties中配置了MongoDB连接关联Testcontainers的参数(比如quarkus.mongodb.connection-string=${testcontainers.mongodb.uri}),所有标注@QuarkusTest的测试启动时,Quarkus会加载该配置,自动触发MongoDB容器启动,无论测试是否依赖MongoDB。
  • Quarkus扩展自动检测机制:当项目同时依赖quarkus-mongodb-client和Testcontainers MongoDB依赖时,Quarkus的自动配置会默认尝试为Mongo客户端提供可用实例,进而启动Testcontainers容器,哪怕测试类没显式引入@QuarkusTestResource。
  • 全局注册了Testcontainers资源:若MongoIntegrationTest被全局注册(比如在src/test/resources/META-INF/services/io.quarkus.test.common.QuarkusTestResourceLifecycleManager文件中配置了该类),所有@QuarkusTest都会加载这个资源管理器,导致容器启动。
解决办法

1. 拆分测试配置文件

将MongoDB相关配置从通用测试配置中分离:

  • 保留application-test.properties作为无依赖测试的通用配置,删除所有MongoDB、Testcontainers相关参数。
  • 创建application-mongo-test.properties,专门存放MongoDB测试配置:
    quarkus.mongodb.connection-string=${testcontainers.mongodb.uri}
    
  • 在需要MongoDB的测试类中指定使用该配置:
    @QuarkusTest
    @QuarkusTestResource(MongoIntegrationTest.class)
    @TestProfile(MongoTestProfile.class)
    public class ClassMongoTest {
        // 测试代码
    }
    
    // 定义测试Profile
    public class MongoTestProfile implements QuarkusTestProfile {
        @Override
        public String getConfigProfile() {
            return "mongo-test";
        }
    }
    

2. 禁用指定Testcontainers自动启动

在无依赖测试类中,通过配置禁用MongoDB容器或全局Testcontainers的自动启动:

@QuarkusTest
@TestConfigProperty(key = "quarkus.testcontainers.mongodb.enabled", value = "false")
public class ClassNormalTest {
    // 测试代码
}

如果需要完全禁用Testcontainers,可替换为:

@TestConfigProperty(key = "quarkus.testcontainers.enabled", value = "false")

3. 禁用Mongo扩展(针对无依赖测试)

在无依赖测试类中直接禁用Mongo客户端扩展,从根源避免容器启动:

@QuarkusTest
@DisableExtension(MongoClientExtension.class)
public class ClassNormalTest {
    // 测试代码
}

4. 移除全局Testcontainers资源注册

检查src/test/resources/META-INF/services/io.quarkus.test.common.QuarkusTestResourceLifecycleManager文件,若其中包含MongoIntegrationTest的全类名,将其删除,改为仅在需要的测试类中通过@QuarkusTestResource显式引入。


内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:37:19