O AndroidX Test inclui um conjunto de regras JUnit a serem usadas com o AndroidJUnitRunner
. As regras JUnit proporcionam mais flexibilidade e reduzem o código clichê exigido nos testes.
ActivityTestRule
Esta regra oferece testes funcionais de uma única atividade. A atividade em teste é iniciada antes de cada teste anotado com @Test
e antes de qualquer método anotado com @Before
. Ela é encerrada depois que o teste e todos os métodos anotados com @After
são concluídos. Para acessar a atividade em teste na sua lógica, chame ActivityTestRule.getActivity()
.
Observação: o AndroidX Test inclui outra API, ActivityScenario
, que está atualmente na versão Beta. Essa API é compatível com vários ambientes de teste e oferece segurança da linha de execução nos testes que a utilizam.
Conheça essa API para saber como ela pode ajudar a impulsionar os ciclos de vida das atividades do seu app.
O snippet de código a seguir demonstra como incorporar ActivityTestRule
na lógica de teste.
Kotlin
@RunWith(AndroidJUnit4::class.java) @LargeTest class MyClassTest { @get:Rule val activityRule = ActivityTestRule(MyClass::class.java) @Test fun myClassMethod_ReturnsTrue() { ... } }
Java
@RunWith(AndroidJUnit4.class) @LargeTest public class MyClassTest { @Rule public ActivityTestRule<MyClass> activityRule = new ActivityTestRule(MyClass.class); @Test public void myClassMethod_ReturnsTrue() { ... } }
ServiceTestRule
Esta regra fornece um mecanismo simplificado para iniciar e encerrar seu serviço antes e depois do teste. Ela também garante que o serviço seja conectado ou vinculado a um serviço. O serviço pode ser iniciado ou vinculado por meio de um dos métodos auxiliares. Ele é automaticamente interrompido ou desvinculado depois que o teste e todos os métodos anotados com @After
são 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 nos testes do Android, consulte os recursos a seguir.
Amostras
- BasicSample (em inglês): uso simples de
ActivityTestRule
.