Gradle测试单元测试 - 运行所有测试,除了一个或几个 - 命令行

10
我在我的项目中有一堆JUnit单元测试。构建系统是Gradle。操作系统:Windows/Linux。
在Gradle中,测试(单元测试)是免费的,即如果您运行“gradle clean build”,Gradle还将运行“test”任务(以运行您的单元测试)。我知道如何在命令行中运行测试文件夹中的所有测试或特定测试。例如:请参见Gradle用户指南中的23.13.3和23.13.4章节:http://www.gradle.org/docs/current/userguide/java_plugin.html#sec:java_test 我的问题是:
我想运行除了一个或多个测试之外的所有测试。如何在Gradle中通过命令行实现这一点(而不是在build.gradle或更高级别的.gradle文件中使用exclude(s)在test { ... }部分中)?
2个回答

15
您可以基于属性值有条件地添加排除。
test {
    if (project.hasProperty('excludeTests')) {
        exclude project.property('excludeTests')
    }
}

你可以从命令行执行以下操作:

$ gradle -PexcludeTests=org.foo.MyTest build

我认为那可能会起作用(作为最后的选择)。我曾经以为Gradle测试任务已经内置了这些命令行选项(比如使用-Dsingle.test=...运行单个测试),谢谢。 - AKS
test.single 属性是唯一可用的属性。没有排除的等效属性。 - Mark Vieira
2
据我所知,项目属性是通过“-P”添加的,“-D”用于系统属性,至少在我使用的1.12版本上是这样。 $ gradle -PexcludeTests=org.foo.MyTest build - durilka

1
如果您想在命令行中排除多个测试,这里是Mark答案的增强版本(在gradle 6.8.2中测试):
    if (project.hasProperty('excludeTests')) {
        project.properties['excludeTests']?.replaceAll('\\s', '')?.split('[,;]').each {
           exclude "${it}"
        }
    }

在命令行上,您现在可以指定多个测试进行排除:
$ gradlew test -PexcludeTests="**/bar*, **/foo.SomeTest*"

分隔符可以是“;”或“,”,可以带有空格也可以没有。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接