如何配置Quarkus(Gradle)识别integrationTest测试目录?
我之前迁移项目到Quarkus时也碰到过一模一样的问题——Quarkus的Gradle插件默认只认test和native-test这两个测试源码集,所以自定义的integrationTest目录会被它忽略,导致你看到的那个报错。下面是我验证过的完整配置方案,一步步帮你解决:
1. 先修正你的源码集配置
你原来的配置里把integrationtest/resources加到了main的resources里,这会导致集成测试的资源被打包到主程序里,显然不对。应该给integrationTest源码集单独配置java和resources目录:
sourceSets { integrationTest { // 指定集成测试的java源码目录 java.srcDir file("src/integrationtest/java") // 指定集成测试的资源目录 resources.srcDir file("src/integrationtest/resources") // 依赖主代码和测试代码的输出,方便复用工具类 compileClasspath += sourceSets.main.output + sourceSets.test.output runtimeClasspath += sourceSets.main.output + sourceSets.test.output } }
2. 创建Quarkus兼容的集成测试任务
Quarkus有专门的测试任务类型,用来处理集成测试的生命周期(比如启动应用、注入依赖等)。我们需要创建一个类型为QuarkusIntegrationTest的任务(如果你的集成测试需要启动完整应用),或者QuarkusTest(如果是不需要启动应用的轻量集成测试):
// 创建集成测试任务,指定Quarkus的任务类型 task integrationTest(type: io.quarkus.gradle.tasks.QuarkusIntegrationTest) { description = "运行项目集成测试" group = "verification" // 指定测试类的输出目录 testClassesDirs = sourceSets.integrationTest.output.classesDirs // 指定集成测试的类路径 classpath = sourceSets.integrationTest.runtimeClasspath // 确保集成测试在单元测试之后运行 mustRunAfter test } // 让check任务依赖集成测试,执行gradle check时会自动跑集成测试 check.dependsOn integrationTest
3. 关键:告诉Quarkus插件识别你的integrationTest源码集
这一步是解决报错的核心——Quarkus默认只扫描test和native-test的测试类,所以我们需要显式把integrationTest源码集加入到它的扫描列表中:
quarkus { testSources { // 添加自定义的集成测试源码集 sourceSets.integrationTest } }
为什么这样配置能解决问题?
你看到的报错本质是Quarkus的测试扫描逻辑只关注它默认的几个目录,通过quarkus.testSources配置,我们告诉Quarkus插件:除了默认的测试目录,还要扫描integrationTest源码集下的测试类。同时,通过指定QuarkusIntegrationTest任务类型,确保集成测试能享受到Quarkus的测试支持(比如依赖注入、应用启动管理等)。
额外注意事项
- 确保你的目录结构和配置里的路径一致:比如配置里是
src/integrationtest/java,你的实际目录也要是小写的integrationtest(如果是大写的integrationTests,要对应修改配置里的路径)。 - 如果你使用的是Quarkus 3.x和Gradle 7+,上述配置完全兼容;如果是更旧的版本,可能需要调整任务类型为
QuarkusTest,但核心的testSources配置逻辑是一样的。
内容的提问来源于stack exchange,提问作者JSBach

