How to run only one unit test class using Gradle

Unit TestingTestingGradle

Unit Testing Problem Overview


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.

Unit Testing Solutions


Solution 1 - Unit Testing

To run a single test class Airborn's answer is good.

With using some command line options, which found here, you can simply do something like this.

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

From version 1.10 of gradle it supports selecting tests, using a test filter. For example,

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

For multi-flavor environments (a common use-case for Android), check this answer, as the --tests argument will be unsupported and you'll get an error.

Solution 2 - Unit Testing

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.

Solution 3 - Unit Testing

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.

Solution 4 - Unit Testing

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)

Solution 5 - Unit Testing

After much figuring out, the following worked for me:

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

Solution 6 - Unit Testing

For multi modules projects it's necessary to use module's name and buildType:

./gradlew :module_name:testDebugUnitTest --tests com.package_name.TestsClass.*

To run some test method the same command, but with test's name:

./gradlew :module_name:testDebugUnitTest --tests com.package_name.TestsClass.test 

Solution 7 - Unit Testing

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 

Solution 8 - Unit Testing

Run a single test called MyTest:

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

Solution 9 - Unit Testing

You should try to add asteriks (*) to the end.

> gradle test --tests "com.a.b.c.*"

Solution 10 - Unit Testing

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

Solution 11 - Unit Testing

This worked for me

  • Release case:

    gradle testReleaseUnitTest --tests testClass

  • Debug case:

    gradle testDebugUnitTest --tests AsyncExecutorTest

You can see de projects with: gradle -q projects and move to the project where is the class to test

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbulaView Question on Stackoverflow
Solution 1 - Unit TestingMaleen AbewardanaView Answer on Stackoverflow
Solution 2 - Unit TestingairbornView Answer on Stackoverflow
Solution 3 - Unit TestinggreperrorView Answer on Stackoverflow
Solution 4 - Unit TestinganagafView Answer on Stackoverflow
Solution 5 - Unit TestingPratik KhadloyaView Answer on Stackoverflow
Solution 6 - Unit TestingVladislavView Answer on Stackoverflow
Solution 7 - Unit TestingNaveenprasanth DuraisamyView Answer on Stackoverflow
Solution 8 - Unit TestingkrekerView Answer on Stackoverflow
Solution 9 - Unit TestingmutkanView Answer on Stackoverflow
Solution 10 - Unit TestingGregView Answer on Stackoverflow
Solution 11 - Unit TestingNoe Adrian Acuña PradoView Answer on Stackoverflow