如何在gradle上只运行一个测试类

bul*_*ula 363 testing gradle

我是Gradle的新手.我使用Gradle 1.10和Ubuntu 13.

我想知道是否有任何命令只执行一个测试类,类似于SBT中的'testonly'.

Mal*_*ana 476

要运行一个测试类Airborn的答案是好的.

使用这里找到的一些命令行选项,你可以简单地做这样的事情.

gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests *SomeTest.someSpecificFeature
gradle test --tests *SomeSpecificTest
gradle test --tests all.in.specific.package*
gradle test --tests *IntegTest
gradle test --tests *IntegTest*ui*
gradle test --tests *IntegTest.singleMethod
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui
Run Code Online (Sandbox Code Playgroud)

从gradle版本1.10开始,它支持使用测试过滤器选择测试.例如,

apply plugin: 'java'

test {
  filter {
    //specific test method
      includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"

     //specific test method, use wildcard for packages
     includeTestsMatching "*SomeTest.someSpecificFeature"

     //specific test class
     includeTestsMatching "org.gradle.SomeTest"

     //specific test class, wildcard for packages
     includeTestsMatching "*.SomeTest"

     //all classes in package, recursively
     includeTestsMatching "com.gradle.tooling.*"

     //all integration tests, by naming convention
      includeTestsMatching "*IntegTest"

     //only ui tests from integration tests, by some naming convention
     includeTestsMatching "*IntegTest*ui"
   }
}
Run Code Online (Sandbox Code Playgroud)

对于多味道环境(Android的常见用例),请检查此答案,因为--tests参数将不受支持并且您将收到错误.

  • “singleMethod”对我不起作用(不再?)。 (2认同)

小智 177

你可以做gradle -Dtest.single=ClassUnderTestTest test,如果你想测试一个类或使用正则表达式像gradle -Dtest.single=ClassName*Test test你可以找到测试filtring类的更多的例子根据这个链接部分23.12.测试

  • 使用`--test`选项,您还可以将测试限制在测试类中的单个方法.例如:`gradle test --tests*MyTest.someMethod`将在你的`MyTest`类中运行单个测试`someMethod`.在构建测试用例时,我通常一次运行一个方法,以便更容易专注于我需要调试的输出,然后在最后运行整个测试用例. (58认同)
  • 最新版本(从1.10左右开始)支持`--tests`命令行选项,该选项设置为替换`-DtestTaskName.single`. (28认同)
  • 另外值得注意的是,如果你想在多模块项目中运行单个测试,那么命令是`gradle -D:submodule:test.single = ClassUnderTestTest:submodule:test`.参见[关于gradle.org的讨论](https://discuss.gradle.org/t/dtest-single-doesnt-work-when-test-tasks-is-in-buildsrc/2485/2) (9认同)
  • 您可能还想使用`--no-rebuild`选项,例如`gradle -D:submodule:test.single = ClassUnderTestTest --no-rebuild:submodule:test`以防止重建依赖项,然后执行那个单一的测试更快. (2认同)
  • 虽然在Gradle 5中不推荐使用此选项 (2认同)

gre*_*ror 94

如果您有一个多模块项目:

让我们说你的模块结构是

root-module
 -> a-module
 -> b-module
Run Code Online (Sandbox Code Playgroud)

你想要运行的测试(testToRun)是在b-module中,带有完整路径:com.xyz.b.module.TestClass.testToRun

在这里,您有兴趣在b模块中运行测试,因此您应该看到b模块可用的任务.

./gradlew :b-module:tasks
Run Code Online (Sandbox Code Playgroud)

上面的命令将列出b-module中包含描述的所有任务.在理想情况下,您将有一个名为test的任务来运行该模块中的单元测试.

./gradlew :b-module:test
Run Code Online (Sandbox Code Playgroud)

现在,您已经到了运行b-module中所有测试的点,最后您可以将参数传递给上面的任务来运行与特定路径模式匹配的测试

./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
Run Code Online (Sandbox Code Playgroud)

现在,如果你跑了,而不是这个

./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"

它将为模块a和b运行测试任务,这可能导致失败,因为在模块中没有与上述模式匹配的任何内容.

  • 或者简单地`./gradlew :b-module:test --tests testToRun` (2认同)

Pra*_*oya 28

经过深思熟虑后,以下内容对我有用:

gradle test --tests "a.b.c.MyTestFile.mySingleTest"

  • 这个命令对我不起作用.>错误:未知的命令行选项'--tests' (9认同)

ana*_*gaf 24

请注意,如果您有不同的口味,则--test选项可能不起作用(以"未知的命令行选项' - 测试'"失败).在这种情况下,有必要指定特定的测试任务(例如'testProdReleaseUnitTest'而不仅仅是'test')

  • 进入这个确切的情况谢谢! (4认同)

Vla*_*lav 18

对于多模块项目,必须使用模块的名称和构建类型:

./gradlew :module_name:testDebugUnitTest --tests com.package_name.TestsClass.*
Run Code Online (Sandbox Code Playgroud)

要运行某些测试方法,请使用相同的命令,但使用测试名称:

./gradlew :module_name:testDebugUnitTest --tests com.package_name.TestsClass.test 
Run Code Online (Sandbox Code Playgroud)


kre*_*ker 8

运行一个名为 MyTest 的测试:

./gradlew app:testDebug --tests=com.example.MyTest
Run Code Online (Sandbox Code Playgroud)


小智 5

以下是使用gradlew命令行选项运行单个测试类的命令:

gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Run Code Online (Sandbox Code Playgroud)

下面的示例运行com.example.TestClass带有变体的类Variant_1:

gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass 
Run Code Online (Sandbox Code Playgroud)