Gradle:如何排除一些测试?

JBT*_*JBT 26 java unit-testing gradle

我的src/test/文件夹包括单元和功能测试.功能测试的类路径有单词cucumber,而单元测试没有.那么,我怎样才能运行单元测试呢?

非常感谢你.

PS:我知道使用"包含"逻辑来选择测试很容易.例如,要仅在我的情况下运行功能测试,我可以简单地使用它
./gradlew test -Dtest.single=cucumber/**/
但是,我不知道如何以简单的方式排除测试.

顺便说一下,我正在使用gradle 1.11.

JBT*_*JBT 32

图片来源:这个答案的灵感来自JB Nizet的回答.它被发布是因为它对我的问题更直接.

要仅运行单元测试,请创建一个新任务,如下所示:

task unitTest( type: Test ) {
    exclude '**/cucumber/**'
}
Run Code Online (Sandbox Code Playgroud)

这样我们就有:
运行所有测试:./gradlew test
运行所有单元测试:./gradlew unitTest
运行所有功能测试:./gradlew test -Dtest.single=cucumber/**/


JB *_*zet 22

任务的文档解释了它,并举例说明了一切:

apply plugin: 'java' // adds 'test' task

test {
  // ...

  // explicitly include or exclude tests
  include 'org/foo/**'
  exclude 'org/boo/**'

  // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 创建另一个名为`cucumberTest`的任务,类型为`Test`,仅包括黄瓜测试,第三个任务称为`allTests`,取决于`test`和`cucumberTest`.然后你可以运行`test`来运行单元测试,`cucumberTest`运行黄瓜测试,'allTests`运行所有东西. (5认同)
  • -@ JB Nizet:这将永久排除某些测试。它不灵活。如果我有时想运行所有测试该怎么办?是否可以创建一个任务,例如unitTest,它扩展了test任务但具有一些过滤功能? (2认同)

sha*_*njo 7

您可以根据外部系统属性来排除它。

-Dtest.profile=integration
Run Code Online (Sandbox Code Playgroud)

并在build.gradle中

test {
    if (System.properties['test.profile'] != 'integration') {
    exclude '**/*integrationTests*'
   }
}
Run Code Online (Sandbox Code Playgroud)


Gay*_*tti 5

您还可以在您的中定义自定义标志build.gradle

test {
    if (project.hasProperty('excludeTests')) {
        exclude project.property('excludeTests')
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在命令行中:

gradle test -PexcludeTests=com.test.TestToExclude
Run Code Online (Sandbox Code Playgroud)