O AndroidX Test inclui um conjunto de regras JUnit para serem usadas com o AndroidJUnitRunner As regras JUnit proporcionam mais flexibilidade e reduzem a o código boilerplate exigido nos testes. Por exemplo, elas podem ser usadas para iniciar um uma atividade específica.
ActivityScenarioRule
Esta regra oferece testes funcionais de uma única atividade. A regra é iniciada
a atividade escolhida antes de cada teste anotado com @Test
, assim como antes
qualquer método com a anotação @Before
. A regra encerra a atividade após o
O teste é concluído e todos os métodos anotados com @After
são concluídos. Para acessar os
atividade na sua lógica de teste, forneça um callback executável para
ActivityScenarioRule.getScenario().onActivity()
:
O snippet de código a seguir demonstra como incorporar
ActivityScenarioRule
na 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 da
os testes e encerrá-los antes e depois. É possível iniciar ou vincular o serviço com
um dos métodos auxiliares. Ele é interrompido ou desvinculado automaticamente após o teste.
é concluído e todos os métodos com a anotação @After
foram concluídos.
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 a recursos a seguir.
Documentação
- Guia Testar seus fragmentos para testar fragmentos isoladamente.
- Como testar o layout do Compose para testar IUs criadas com o Compose.
Amostras
- BasicSample (em inglês): uso simples de
ActivityScenarioRule
.