Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo probar tu servicio

Si estás implementando un Service local como componente de tu app, debes probar el Service para asegurarte de que no se comporte de manera inesperada. Puedes crear pruebas de unidades instrumentadas para verificar que el comportamiento sea correcto en el Service. Por ejemplo, el servicio almacena y muestra valores de datos válidos, y realiza operaciones de datos correctamente.

AndroidX Test proporciona una API para probar tus objetos Service de forma aislada. La clase ServiceTestRule es una regla de JUnit 4 que inicia el servicio antes de que se ejecuten los métodos de prueba de unidades, y finaliza el servicio una vez que se completan las pruebas. Al usar esta regla de prueba, te aseguras de que la conexión al servicio siempre se establezca antes de que se ejecute el método de prueba. Para obtener más información sobre las reglas de JUnit 4, consulta la documentación de JUnit.

Nota: La clase ServiceTestRule no admite la prueba de objetos IntentService. Si necesitas probar un objeto IntentService, debes encapsular la lógica en una clase diferente y crear una prueba de unidades correspondiente en su lugar.

Cómo configurar el entorno de prueba

Antes de compilar la prueba de integración para el servicio, asegúrate de configurar el proyecto para pruebas instrumentadas, según se describe en Cómo 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 de JUnit 4. Para obtener más información sobre cómo crear clases de prueba de JUnit 4 y cómo usar los métodos de aserción de JUnit 4, consulta Cómo crear una clase de prueba de unidades instrumentada.

Si deseas crear una prueba de integración para tu servicio, agrega la anotación @RunWith(AndroidJUnit4::class) al comienzo de la definición de la clase de prueba. También debes especificar la clase AndroidJUnitRunner que proporciona AndroidX Test como el ejecutor de pruebas predeterminado. Este paso se describe de forma más detallada en Cómo ejecutar pruebas de unidades instrumentadas.

A continuación, crea una instancia de ServiceTestRule en tu prueba mediante la anotación @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 correctamente la app 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);
    }
    

Cómo ejecutar pruebas de integración para servicios

Puedes ejecutar pruebas de integración desde Android Studio o desde la línea de comandos. Asegúrate de especificar AndroidJUnitRunner como el ejecutor de instrumentación predeterminado en tu proyecto.

Para ejecutar la prueba de integración del servicio, sigue los pasos para ejecutar las pruebas instrumentadas que se describen en Cómo comenzar con las pruebas.

Consulta también sobre los servicios.

Recursos adicionales

Para obtener más información sobre este tema, consulta los siguientes recursos adicionales.

Muestras