Si estás implementando un Service
local como componente de tu app, debes
Puedes crear pruebas de instrumentación para verificar que su comportamiento sea correcto.
AndroidX Test proporciona una API para probar tus objetos Service
en
de forma aislada. La clase ServiceTestRule
es una regla JUnit 4 que inicia tu
servicio antes de que se ejecuten los métodos de prueba de unidades y cierra el servicio después de
pruebas completadas. Para obtener más información sobre las reglas de JUnit 4, consulta la documentación de JUnit
documentación.
Cómo configurar el entorno de prueba
Antes de crear tu prueba de integración para el servicio, asegúrate de configurar tu proyecto para pruebas instrumentadas, como se describe en Configurar el proyecto para AndroidX Test.
Cómo crear una prueba de integración para servicios
La prueba de integración se debe escribir como una clase de prueba JUnit 4. Para obtener más información sobre la creación de clases de prueba de JUnit 4 y el uso de métodos de aserción de JUnit 4, consulta Crea una clase de prueba instrumentada.
Crea una instancia de ServiceTestRule
en tu prueba mediante @Rule
.
.
Kotlin
@get:Rule val serviceRule = ServiceTestRule()
Java
@Rule public final ServiceTestRule serviceRule = new ServiceTestRule();
En el siguiente ejemplo, se muestra cómo implementar una prueba de integración para un
servicio. El método de prueba testWithBoundService()
verifica que se vincule la app.
correctamente a un servicio local y que la interfaz del servicio se comporte
correctamente.
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); }
Recursos adicionales
Para obtener más información sobre este tema, consulta los siguientes recursos adicionales.