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.