Regras JUnit4 com o AndroidX Test

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

Amostras

  • BasicSample (em inglês): uso simples de ActivityScenarioRule.