Tester votre service

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

AndroidX Test fournit une API pour tester vos objets Service dans l'isolation. La classe ServiceTestRule est une règle JUnit 4 qui lance votre avant l'exécution de vos méthodes de test unitaire, et l'arrête après sont terminés. Pour en savoir plus sur les règles JUnit 4, consultez la page JUnit documentation.

Configurer votre environnement de test

Avant de créer votre test d'intégration pour le service, assurez-vous de configurer votre projet pour les tests d'instrumentation, comme décrit dans la section Configurer un projet pour Test AndroidX

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 page Créez une classe de test d'instrumentation.

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

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

L'exemple suivant montre comment implémenter un test d'intégration pour un Google Cloud. La méthode de test testWithBoundService() vérifie que l'application se lie à un service local et que l'interface de service 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