Answers:
要运行一个单独的测试班,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
从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"
}
}
对于多种口味的环境(Android的常见用例),请检查此答案,因为该--tests
参数不受支持,并且会出现错误。
--tests
用于在类中调用单个测试方法,我们也会看到所有类(甚至是所有未运行的类)上的迭代,这太慢了。不知道这种缓慢是由于我们的环境造成的还是会影响其他人。如果有更多信息,可以更新。
gradle -Dtest.single=ClassUnderTestTest test
如果您要测试单个类或使用regexp,则可以执行此操作,例如gradle -Dtest.single=ClassName*Test test
可以在此链接第23.12节中找到更多测试过滤类的示例。测试。
--tests
命令行选项,该选项设置为replace -DtestTaskName.single
。
--test
选项,您还可以将测试限制为测试类中的单个方法。例如: gradle test --tests *MyTest.someMethod
将仅someMethod
在您的MyTest
班级中运行单个测试。在构建测试用例时,通常一次只运行一个方法,以使其更容易专注于需要调试的输出,然后最后运行整个测试用例。
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
。请参见上gradle.org讨论
--no-rebuild
选项,例如gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
,防止重建依赖关系,从而更快地执行单个测试。
如果您有一个多模块项目:
假设您的模块结构是
root-module
-> a-module
-> b-module
而您要运行的test(testToRun)在b模块中,具有完整路径:com.xyz.b.module.TestClass.testToRun
如此处所示,您有兴趣在b模块中运行测试,因此您应该看到可用于b模块的任务。
./gradlew :b-module:tasks
上面的命令将列出带有描述的b模块中的所有任务。在理想情况下,您将有一个名为test的任务,以在该模块中运行单元测试。
./gradlew :b-module:test
现在,您已经可以在b模块中运行所有测试,最后可以将参数传递给上述任务以运行与特定路径模式匹配的测试
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
现在,如果您运行,则代替此
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
它将同时为模块a和b运行测试任务,这可能会导致失败,因为在a模块中没有与上述模式匹配的内容。
./gradlew :b-module:test --tests testToRun
经过一番摸索,以下对我有用:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
请注意,--tests
如果您使用不同的版本types/flavors
(失败Unknown command-line option '--tests'
),则该选项可能不起作用。在这种情况下,有必要指定特定的测试任务(例如testProdReleaseUnitTest
而不是test
)
./gradlew test --tests *testMyCollectionTake*
我不知道应该如何test
用通配符替换测试名称
以下是使用gradlew
命令行选项运行单个测试类的命令:
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
下面的示例运行com.example.TestClass
带有variant的类Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
就我而言,我的eclipse java编译器警告设置得太高,而eclipse不能识别我的类对于执行有效。更新我的编译器设置可以解决此问题。您可以在此处阅读有关此内容的更多信息:注解-无法为空-无法解析