Cómo probar tu servicio

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.

Ejemplos