Dienst testen

Wenn du eine lokale Service als Komponente deiner App implementierst, können instrumentierte Tests erstellen, um zu prüfen, ob das Verhalten korrekt ist.

AndroidX Test bietet eine API zum Testen deiner Service-Objekte in Isolation. Die Klasse ServiceTestRule ist eine JUnit 4-Regel, mit der Ihre bevor die Einheitentestmethoden ausgeführt werden, und fährt den Dienst nach dem abgeschlossen sind. Weitere Informationen zu JUnit 4-Regeln findest du in der JUnit Dokumentation.

Testumgebung einrichten

Bevor Sie den Integrationstest für den Dienst erstellen, müssen Sie die Konfiguration Ihr Projekt für instrumentierte Tests verwenden, wie unter Projekt einrichten für AndroidX-Test

Integrationstest für Dienste erstellen

Dein Integrationstest sollte als JUnit 4-Testklasse geschrieben werden. Weitere Informationen zum Erstellen von JUnit 4-Testklassen und zur Verwendung von JUnit 4-Assertion-Methoden, siehe Erstellen Sie eine instrumentierte Testklasse.

Erstellen Sie im Test eine ServiceTestRule-Instanz mithilfe der @Rule .

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

Das folgende Beispiel zeigt, wie Sie einen Integrationstest für eine Service. Mit der Testmethode testWithBoundService() wird geprüft, ob die Anwendung bindet an einen lokalen Dienst senden und dass sich die Dienstschnittstelle korrekt sind.

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 zusätzlichen Ressourcen.

Produktproben