O AndroidX Test inclui um conjunto de regras JUnit (em inglês) a serem usadas com o AndroidJUnitRunner. As regras JUnit proporcionam mais flexibilidade e reduzem o código boilerplate exigido nos testes. Por exemplo, elas podem ser usadas para iniciar uma atividade específica.
ActivityScenarioRule
Esta regra oferece testes funcionais de uma única atividade. A regra inicia
a atividade escolhida antes de cada teste anotado com @Test
, bem como antes
de qualquer método anotado com @Before
. A regra encerra a atividade após a
conclusão do teste e todos os métodos anotados com @After
serem concluídos. Para acessar a atividade
especificada na sua lógica de teste, forneça um callback executável para
ActivityScenarioRule.getScenario().onActivity()
.
O snippet de código abaixo demonstra como incorporar
ActivityScenarioRule
à lógica de teste:
Kotlin
@RunWith(AndroidJUnit4::class.java) @LargeTest class MyClassTest { @get:Rule val activityRule = ActivityScenarioRule(MyClass::class.java) @Test fun myClassMethod_ReturnsTrue() { activityRule.scenario.onActivity { … } // Optionally, access the activity. } }
Java
public class MyClassTest { @Rule public ActivityScenarioRule<MyClass> activityRule = new ActivityScenarioRule(MyClass.class); @Test public void myClassMethod_ReturnsTrue() { ... } }
ServiceTestRule
Essa regra oferece um mecanismo simplificado para iniciar o serviço antes dos testes e encerrá-lo antes e depois. É possível iniciar ou vincular o serviço a
um dos métodos auxiliares. Ele é interrompido ou se desvincula automaticamente após a conclusão do
teste e a conclusão de todos os métodos anotados com @After
.
Kotlin
@RunWith(AndroidJUnit4::class.java) @MediumTest class MyServiceTest { @get:Rule val serviceRule = ServiceTestRule() @Test fun testWithStartedService() { serviceRule.startService( Intent(ApplicationProvider.getApplicationContext<Context>(), MyService::class.java)) // Add your test code here. } @Test fun testWithBoundService() { val binder = serviceRule.bindService( Intent(ApplicationProvider.getApplicationContext(), MyService::class.java)) val service = (binder as MyService.LocalBinder).service assertThat(service.doSomethingToReturnTrue()).isTrue() } }
Java
@RunWith(AndroidJUnit4.class) @MediumTest public class MyServiceTest { @Rule public final ServiceTestRule serviceRule = new ServiceTestRule(); @Test public void testWithStartedService() { serviceRule.startService( new Intent(ApplicationProvider.getApplicationContext(), MyService.class)); // Add your test code here. } @Test public void testWithBoundService() { IBinder binder = serviceRule.bindService( new Intent(ApplicationProvider.getApplicationContext(), MyService.class)); MyService service = ((MyService.LocalBinder) binder).getService(); assertThat(service.doSomethingToReturnTrue()).isTrue(); } }
Outros recursos
Para saber mais sobre o uso de regras JUnit em testes do Android, consulte os recursos abaixo.
Documentação
- Guia Testar seus fragmentos para testar fragmentos de forma isolada.
- Testar o layout do Compose para testar IUs criadas com o Compose.
Exemplos
- BasicSample: uso simples de
ActivityScenarioRule
.