Is there a way to only run a specific set of instrumentation tests in an Android Gradle project?

android, android-gradle-plugin, gradle, travis-ci

Solution

Since Android Gradle Plugin 1.3.0

Starting from version 1.3.0 you can (finally!) specify the arguments the Android Gradle Plugin have to pass to the `InstrumentationTestRunner`.

For example, if you want to run only the tests annotated with `@SmallTest` and ignore the others:

android {
  //....
  defaultConfig {
  //....
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    testInstrumentationRunnerArgument "size", "small"
  }
}

Old workaround Prior to plugin 1.3.0 is not possible to do that but I've found a little workaound. Basically I've annotated with the `@SmallTest` annotation the fast tests and using a custom subclass of the `InstrumentationTestRunner` I'm able to run just them and not the whole suite.

You can found the example code in this gist.

Problem

I have an Android/Gradle project. Whenever I want to run tests, I run: ``` ./gradlew connectedInstrumentTest ``` which runs all my tests under the test folder of my project. My test folder has several automation tests as well as non-automation tests. I'm mostly interested in running the fast non-automation tests without the slow automation tests. Is there a way to run just a specific set of tests, such as from one specific class or anything similar? I'm basically asking about any kind of separation so that I can choose to run just a few tests when I want to. Created a sample project here. Edit `local.properties` to point at your Android SDK. Next, start up an emulator or connect a phone to your computer. Then you can run tests using `./gradlew connectedInstrumentTest --info`. This runs all tests. What I am unable to figure out is how to only run tests in, say, one class and not all tests.

Original source

Related problems