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:
@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.
}
}
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.
@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()
}
}
@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
.