JUnit4-Regeln mit AndroidX-Test

AndroidX Test enthält eine Reihe von JUnit-Regeln, die mit dem AndroidJUnitRunner verwendet werden. JUnit-Regeln bieten mehr Flexibilität und reduzieren den bei Tests erforderlichen Boilerplate-Code. Sie können beispielsweise verwendet werden, um eine bestimmte Aktivität zu starten.

Aktivitätsszenarioregel

Diese Regel ermöglicht Funktionstests für eine einzelne Aktivität. Die Regel startet die ausgewählte Aktivität vor jedem mit @Test annotierten Test sowie vor jeder mit @Before annotierten Methode. Die Regel beendet die Aktivität, nachdem der Test abgeschlossen ist und alle mit @After gekennzeichneten Methoden abgeschlossen sind. Damit du auf die jeweilige Aktivität in deiner Testlogik zugreifen kannst, musst du einen Callback bereitstellen, der für ActivityScenarioRule.getScenario().onActivity() ausgeführt werden kann.

Das folgende Code-Snippet zeigt, wie Sie ActivityScenarioRule in Ihre Testlogik einbinden:

Kotlin


@RunWith(AndroidJUnit4::class.java)
@LargeTest
class MyClassTest {
  @get:Rule
  val activityRule = ActivityScenarioRule(MyClass::class.java)

  @Test fun myClassMethod_ReturnsTrue() {
    activityRule.scenario.onActivity { … } // Optionally, access the activity.
   }
}

Java


public class MyClassTest {
    @Rule
    public ActivityScenarioRule<MyClass> activityRule =
            new ActivityScenarioRule(MyClass.class);

    @Test
    public void myClassMethod_ReturnsTrue() { ... }
}

Diensttestregel

Diese Regel bietet einen vereinfachten Mechanismus, mit dem Sie Ihren Dienst vor den Tests starten und davor und danach herunterfahren können. Sie können den Dienst mit einer der Hilfsmethoden starten oder binden. Der Vorgang wird automatisch beendet oder die Bindung wird aufgehoben, nachdem der Test abgeschlossen und alle mit @After annotierten Methoden abgeschlossen sind.

Kotlin


@RunWith(AndroidJUnit4::class.java)
@MediumTest
class MyServiceTest {
  @get:Rule
  val serviceRule = ServiceTestRule()

  @Test fun testWithStartedService() {
    serviceRule.startService(
      Intent(ApplicationProvider.getApplicationContext<Context>(),
      MyService::class.java))
    // Add your test code here.
  }

  @Test fun testWithBoundService() {
    val binder = serviceRule.bindService(
      Intent(ApplicationProvider.getApplicationContext(),
      MyService::class.java))
    val service = (binder as MyService.LocalBinder).service
    assertThat(service.doSomethingToReturnTrue()).isTrue()
  }
}

Java


@RunWith(AndroidJUnit4.class)
@MediumTest
public class MyServiceTest {
    @Rule
    public final ServiceTestRule serviceRule = new ServiceTestRule();

    @Test
    public void testWithStartedService() {
        serviceRule.startService(
                new Intent(ApplicationProvider.getApplicationContext(),
                MyService.class));
        // Add your test code here.
    }

    @Test
    public void testWithBoundService() {
        IBinder binder = serviceRule.bindService(
                new Intent(ApplicationProvider.getApplicationContext(),
                MyService.class));
        MyService service = ((MyService.LocalBinder) binder).getService();
        assertThat(service.doSomethingToReturnTrue()).isTrue();
    }
}

Weitere Informationen

Weitere Informationen zur Verwendung von JUnit-Regeln in Android-Tests finden Sie in den folgenden Ressourcen.

Dokumentation

Produktproben