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

时间:2014-03-19 12:15:47

标签: testing gradle

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

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

10 个答案:

答案 0 :(得分:392)

要运行一个单独的测试课,Airborn的答案很好。

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

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

从gradle版本1.10开始,它支持使用test filter选择测试。例如,

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"
   }
}

对于多风味环境(Android的常见用例),check this answer,因为--tests参数将不受支持,您将收到错误。

答案 1 :(得分:170)

如果您想测试单个类或使用gradle -Dtest.single=ClassUnderTestTest test之类的正则表达式,您可以执行gradle -Dtest.single=ClassName*Test test,您可以找到更多关于测试under this link第23.12节的filtring类的示例。测试

答案 2 :(得分:83)

如果您有多模块项目:

让我们说你的模块结构是

root-module
 -> a-module
 -> b-module

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

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

./gradlew :b-module:tasks

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

./gradlew :b-module:test

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

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

现在,如果你运行

,而不是这个

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

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

答案 3 :(得分:26)

经过多次弄清楚,以下内容对我有用:

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

答案 4 :(得分:13)

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

答案 5 :(得分:0)

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

gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass

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

gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass 

答案 6 :(得分:0)

在我的情况下,我的eclipse java编译器警告设置得太高,而eclipse无法识别我的类对于执行有效。更新我的编译器设置可以解决此问题。您可以在这里了解更多信息:annotation-nonnull-cannot-be-resolved

答案 7 :(得分:0)

您应尝试在最后添加星号(*)。

  

等级测试-测试“ com.a.b.c。*”

答案 8 :(得分:0)

运行一个名为MyTest的测试:

./gradlew app:testDebug --tests=com.example.MyTest

答案 9 :(得分:0)

这对我有用

  • 发布案例:

    gradle testReleaseUnitTest --tests testClass

  • 调试案例:

    gradle testDebugUnitTest --tests AsyncExecutorTest

您可以使用以下命令查看项目:gradle -q projects 并移动到要测试的类所在的项目