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.