我是Gradle的新手。我使用Gradle 1.10和Ubuntu 13.
我想知道是否有任何命令只执行一个测试类,类似于SBT中的'testonly'。
答案 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
并移动到要测试的类所在的项目