如何 运行 被排除的单个测试

How to run a single test that is excluded

我有一个以“IT”结尾的集成测试,默认情况下这些测试被排除在外。我的 build.gradle 包含:

test {
    if (!project.hasProperty('runITs')) {
        exclude '**/**IT.class'
    }
}

check 任务是 build 的一部分,不再是 运行 的集成测试。如果有必要,所有测试(单元+集成)都使用定义的runITs(例如./gradlew -PrunITs=1 check)执行。

效果很好。唯一的缺点是在没有定义 runITs 的情况下,我无法 运行 使用 --test(由 IDE 使用)进行单一集成测试。命令失败并显示消息:未找到给定的测试包括:[**/**IT.class](排除规则)。

有什么方法(例如构建变量)如何识别 --test 的单个测试的 运行 并跳过排除?

尝试调用特定 sub-project 的测试任务。如果测试是 root try

gradle -PrunITs=1 :test --tests 'MServiceTest'

其他

gradle -PrunITs=1 :sub-prj:test --tests 'MServiceTest'

我找到了解决办法。我的 build.gradle 现在包含:

test {
    if (!project.hasProperty('runITs') && filter.commandLineIncludePatterns.empty) {
        exclude '**/**IT.class'
    }
}

当测试 运行 和 --tests 时,过滤器中的列表 commandLineIncludePatterns 不为空并且不应用排除。

详情在测试任务源中一目了然:https://github.com/gradle/gradle/blob/dc8545eb1caf7ea99b48604dcd7b4693e79b6254/subprojects/testing-base/src/main/java/org/gradle/api/tasks/testing/AbstractTestTask.java