Regras JUnit4 com o AndroidX Test

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.