Testa il servizio

Se implementi un Service locale come componente della tua app, può creare test strumentati per verificare che il suo comportamento sia corretto.

AndroidX Test fornisce un'API per testare gli oggetti Service in e l'isolamento dei dati. La classe ServiceTestRule è una regola JUnit 4 che inizia servizio prima dell'esecuzione dei metodi di test delle unità e arresta il servizio dopo test completati. Per ulteriori informazioni sulle regole JUnit 4, consulta la sezione JUnit documentazione.

Configura l'ambiente di test

Prima di creare il test di integrazione per il servizio, assicurati di configurare del tuo progetto per i test instrumentati, come descritto in Configurare il progetto per Test AndroidX.

Crea un test di integrazione per i servizi

Il test di integrazione deve essere scritto come classe di test JUnit 4. Per scoprire di più sulla creazione di classi di test JUnit 4 e sull'utilizzo dei metodi di asserzione JUnit 4, vedere Crea una lezione di test instrumentata.

Crea un'istanza ServiceTestRule nel test utilizzando @Rule annotazione.

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

L'esempio seguente mostra come implementare un test di integrazione per un completamente gestito di Google Cloud. Il metodo di test testWithBoundService() verifica che l'app sia vincolata a un servizio locale e che l'interfaccia del servizio si comporti in modo corretto.

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

Risorse aggiuntive

Per saperne di più su questo argomento, consulta le seguenti risorse aggiuntive.

Campioni