Testar o serviço

Se você estiver implementando um Service local como componente do app, pode criar testes instrumentados para verificar se o comportamento está correto.

O AndroidX Test oferece uma API para testar os objetos Service em isolamento. A classe ServiceTestRule é uma regra do JUnit 4 que inicia seu serviço antes da execução dos métodos de teste de unidade e encerra o serviço após testes concluídos. Para saber mais sobre as regras do JUnit 4, consulte a documentação do JUnit Documentação.

Configurar o ambiente de teste

Antes de criar seu teste de integração para o serviço, configure seu projeto para testes de instrumentação, conforme descrito em Configurar projeto para AndroidX Test

Criar um teste de integração para serviços

Programe seu teste de integração como uma classe de teste do JUnit4. Para saber mais sobre a criação de classes de teste do JUnit 4 e o uso de métodos de declaração do JUnit 4, consulte Crie uma classe de teste instrumentado.

Crie uma instância ServiceTestRule no teste usando o @Rule. uma anotação.

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

O exemplo a seguir mostra como implementar um teste de integração para um serviço. O método de teste testWithBoundService() verifica se o app é vinculado para um serviço local e que a interface do serviço se comporte corretamente.

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

Outros recursos

Para saber mais sobre esse tópico, consulte os recursos adicionais a seguir.

Amostras