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

Gradle:如何将--tests过滤器传递给链式Test任务

解决方法

方案1:修改聚合任务为普通任务,传递命令行测试过滤器

将原有的runIntegrationTest从Test类型改为普通任务,在配置阶段读取命令行传入的--tests参数,手动应用到所有平台测试任务上:

ext.createRunIntegrationTestsTask = { String taskName ,  String buildPlatform ->
    return project.tasks.create(taskName, Test.class) {
        dependsOn buildPlatform
        // 保留原有其他配置
    }
}

def Platforms = ["A", "B"]
def platformTestTasks = []
for (platform in Platforms) {
    def taskName = "runIntegrationTestsPlatform$platform"
    println "Creating task: $taskName"
    def testTask = createRunIntegrationTestsTask(taskName, "buildPlatform$platform")
    platformTestTasks.add(testTask)
}
    
// 修改聚合任务为普通任务,仅负责触发平台测试任务
task runIntegrationTest {
    dependsOn platformTestTasks
    
    doFirst {
        def testFilter = project.gradle.startParameter.testFilter
        if (testFilter != null && !testFilter.testPatterns.isEmpty()) {
            platformTestTasks.each { task ->
                task.testFilter = testFilter
            }
        }
    }
}

方案2:让平台测试任务继承主任务的测试配置(保留主任务为Test类型)

如果希望保留runIntegrationTest的Test类型,可让它不执行实际测试,同时让平台测试任务的测试过滤规则与主任务关联:

ext.createRunIntegrationTestsTask = { String taskName ,  String buildPlatform, Test masterTestTask ->
    return project.tasks.create(taskName, Test.class) {
        dependsOn buildPlatform
        // 直接继承主任务的测试过滤规则
        tests = masterTestTask.tests
        // 保留原有其他配置
    }
}

def Platforms = ["A", "B"]
// 先创建主测试任务,设置为空执行规则避免自身跑测试
task runIntegrationTest(type: Test) {
    include 'invalid/path/**'
}

for (platform in Platforms) {
    def taskName = "runIntegrationTestsPlatform$platform"
    println "Creating task: $taskName"
    createRunIntegrationTestsTask(taskName, "buildPlatform$platform", runIntegrationTest)
}

// 主任务依赖所有平台测试任务
runIntegrationTest.dependsOn Platforms.collect { "runIntegrationTestsPlatform$it" }

原理说明

  • Gradle的--tests参数默认仅作用于直接指定的任务,不会自动传递给依赖任务。
  • 方案1通过读取project.gradle.startParameter.testFilter获取命令行的过滤规则,手动同步到所有平台测试任务。
  • 方案2通过让平台测试任务的tests属性直接引用主任务的配置,实现过滤规则的继承,主任务通过无效路径配置避免自身执行测试。

执行命令保持不变:

gradlew :runIntegrationTest --tests "com.somestuff.methodTest"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:15:33