I am new to Gradle. I use Gradle 1.10 and Ubuntu 13.
I want to know if there's any command to execute only one unit test class, similar to testOnly
in SBT.
This question is related to
unit-testing
testing
gradle
Run a single test called MyTest:
./gradlew app:testDebug --tests=com.example.MyTest
Below is the command to run a single test class using gradlew
command line option:
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Below example to run class com.example.TestClass
with variant Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
You should try to add asteriks (*) to the end.
gradle test --tests "com.a.b.c.*"
In versions of Gradle prior to 5, the test.single
system property can be used to specify a single test.
You can do gradle -Dtest.single=ClassUnderTestTest test
if you want to test single class or use regexp like gradle -Dtest.single=ClassName*Test test
you can find more examples of filtering classes for tests under this link.
Gradle 5 removed this option, as it was superseded by test filtering using the --tests
command line option.
In case you have a multi-module project :
let us say your module structure is
root-module
-> a-module
-> b-module
and the test(testToRun) you are looking to run is in b-module, with full path : com.xyz.b.module.TestClass.testToRun
As here you are interested to run the test in b-module, so you should see the tasks available for b-module.
./gradlew :b-module:tasks
The above command will list all tasks in b-module with description. And in ideal case, you will have a task named test to run the unit tests in that module.
./gradlew :b-module:test
Now, you have reached the point for running all the tests in b-module, finally you can pass a parameter to the above task to run tests which matches the certain path pattern
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
Now, instead of this if you run
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
It will run the test task for both module a and b, which might result in failure as there is nothing matching the above pattern in a-module.
After much figuring out, the following worked for me:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
In my case, my eclipse java compiler warnings were set too high, and eclipse was not recognizing my class as valid for execution. Updating my compiler settings fixed the problem. You can read more about it here: annotation-nonnull-cannot-be-resolved
Please note that --tests
option may not work if you have different build types/flavors
(fails with Unknown command-line option '--tests'
). In this case, it's necessary to specify the particular test task (e.g. testProdReleaseUnitTest
instead of just test
)
Source: Stackoverflow.com