Clo Knibbe
Clo Knibbe

Reputation: 449

How can I select a specific set of tests (not in same package) to run in Android Studio?

Using Run Configurations you can specify groups of tests to run, provided that they are in the same class or the same package. However, I want to specify a group of tests, where the tests are sprinkled throughout my test suite.

I was not able to find specific instructions for how to do this. I figured out a way, and thought I would share it here, in case anyone else finds it useful.

Upvotes: 2

Views: 902

Answers (1)

Clo Knibbe
Clo Knibbe

Reputation: 449

I solved the problem by creating an annotation (can be applied to a test class or to a test method), and having the test runner filter on that annotation.

Define Test Annotation

/**
 * This annotation is used to mark tests for devices with a physical
 * keyboard (Chromebook).
 *  
 * The annotation can be applied to test classes, and to individual
 * tests.
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PhysicalKeyboardTest {
}

Use Test Annotation

@Test
@PhysicalKeyboardTest
public void enterKey_shouldWork() {
    ...
}

Run Configuration - Single Device

In the Run Configuration dialog, under "Android Instrumented Tests"

  • Make a copy of "All Android Tests" configuration
  • Rename copy to "Physical Keyboard Tests"
  • In "Instrumentation arguments"
    • Name field: annotation
    • Value field: com.path-to-annotation-def.PhysicalKeyboardTest

The "Physical Keyboard Tests" run configuration will run all tests annotated with "@PhysicalKeyboardTest", anywhere in the test suite.

Run Configuration - All Connected Devices

In the Run Configuration dialog, under "Gradle"

  • Add a configuration:
    • Name: Physical Keyboard Tests (all devices)
    • Gradle project: select your app
    • Tasks: connectedCheck
    • Arguments: -Pandroid.testInstrumentationRunnerArguments.annotation=com.path-to-your-annotation-def.PhysicalKeyboardTest

The "Physical Keyboard Tests (all devices)" run configuration will run all tests annotated with "@PhysicalKeyboardTest", anywhere in the test suite, on all of the connected devices.

Upvotes: 6

Related Questions