Dienst testen

Wenn Sie ein lokales Service als Komponente Ihrer Anwendung implementieren, können Sie instrumentierte Tests erstellen, um zu prüfen, ob sein Verhalten korrekt ist.

AndroidX Test bietet eine API zum isolierten Testen von Service-Objekten. Die Klasse ServiceTestRule ist eine JUnit 4-Regel, die Ihren Dienst startet, bevor Ihre Einheitentestmethoden ausgeführt werden, und den Dienst nach Abschluss der Tests heruntergefahren. Weitere Informationen zu JUnit 4-Regeln finden Sie in der JUnit-Dokumentation.

Testumgebung einrichten

Bevor Sie den Integrationstest für den Dienst erstellen, müssen Sie Ihr Projekt für instrumentierte Tests konfigurieren, wie unter Projekt für AndroidX Test einrichten beschrieben.

Integrationstest für Dienste erstellen

Ihr Integrationstest sollte als JUnit 4-Testklasse geschrieben werden. Weitere Informationen zum Erstellen von JUnit 4-Testklassen und zum Verwenden von JUnit 4-Assertion-Methoden finden Sie unter Instrumentierte Testklasse erstellen.

Erstellen Sie mithilfe der Annotation @Rule eine ServiceTestRule-Instanz in Ihrem Test.

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


@Rule
public final ServiceTestRule serviceRule = new ServiceTestRule();

Das folgende Beispiel zeigt, wie Sie einen Integrationstest für einen Dienst implementieren können. Die Testmethode testWithBoundService() prüft, ob sich die Anwendung erfolgreich an einen lokalen Dienst bindet und ob die Dienstschnittstelle korrekt funktioniert.

Kotlin


@Test
@Throws(TimeoutException::class)
fun testWithBoundService() {
  // Create the service Intent.
  val serviceIntent = Intent(
      ApplicationProvider.getApplicationContext<Context>(),
      LocalService::class.java
  ).apply {
    // Data can be passed to the service via the Intent.
    putExtra(SEED_KEY, 42L)
  }

  // Bind the service and grab a reference to the binder.
  val binder: IBinder = serviceRule.bindService(serviceIntent)

  // Get the reference to the service, or you can call
  // public methods on the binder directly.
  val service: LocalService = (binder as LocalService.LocalBinder).getService()

  // Verify that the service is working correctly.
  assertThat(service.getRandomInt(), `is`(any(Int::class.java)))
}

Java


@Test
public void testWithBoundService() throws TimeoutException {
  // Create the service Intent.
  Intent serviceIntent =
      new Intent(ApplicationProvider.getApplicationContext(),
        LocalService.class);

  // Data can be passed to the service via the Intent.
  serviceIntent.putExtra(LocalService.SEED_KEY, 42L);

  // Bind the service and grab a reference to the binder.
  IBinder binder = serviceRule.bindService(serviceIntent);

  // Get the reference to the service, or you can call
  // public methods on the binder directly.
  LocalService service =
      ((LocalService.LocalBinder) binder).getService();

  // Verify that the service is working correctly.
  assertThat(service.getRandomInt()).isAssignableTo(Integer.class);
}

Weitere Informationen

Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen.

Produktproben