首页 文章

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

提问于
浏览
265

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

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

6 回答

  • 157

    要运行一个测试类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 参数将不受支持,您将收到错误 .

  • 321

    你可以做 gradle -Dtest.single=ClassUnderTestTest test 如果你想测试单个类或使用像 gradle -Dtest.single=ClassName*Test test 这样的regexp你可以找到更多关于测试的filtring类的例子under this link第23.12节 . 测试

  • 19

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

    让我们说你的模块结构是

    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运行测试任务,这可能导致失败,因为在模块中没有与上述模式匹配的内容 .

  • 0

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

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

  • 72

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

  • 8

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

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

    下面的示例使用变量 Variant_1 运行类 com.example.TestClass

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

相关问题