Tester votre service

Si vous implémentez un Service local en tant que composant de votre application, vous pouvez créer des tests d'instrumentation pour vérifier que son comportement est correct.

AndroidX Test fournit une API pour tester vos objets Service de manière isolée. La classe ServiceTestRule est une règle JUnit4 qui démarre votre service avant l'exécution de vos méthodes de test unitaire et l'arrête une fois les tests terminés. Pour en savoir plus sur les règles de JUnit 4, consultez la documentation de JUnit.

Configurer votre environnement de test

Avant de créer votre test d'intégration pour le service, veillez à configurer votre projet pour les tests d'instrumentation, comme décrit dans Configurer un projet pour AndroidX Test.

Créer un test d'intégration pour les services

Votre test d'intégration doit être écrit sous la forme d'une classe de test JUnit 4. Pour en savoir plus sur la création de classes de test JUnit 4 et l'utilisation des méthodes d'assertion JUnit 4, consultez la section Créer une classe de test d'instrumentation.

Créez une instance ServiceTestRule dans votre test à l'aide de l'annotation @Rule.

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

L'exemple suivant montre comment mettre en œuvre un test d'intégration pour un service. La méthode de test testWithBoundService() vérifie que l'application est correctement liée à un service local et que l'interface du service se comporte correctement.

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);
}

Ressources supplémentaires

Pour en savoir plus à ce sujet, consultez les ressources supplémentaires suivantes.

Exemples