Reglas de JUnit4 con AndroidX Test

AndroidX Test incluye un conjunto de reglas JUnit para usar con AndroidJUnitRunner, que proporcionan más flexibilidad y reducen el código repetitivo requerido en las pruebas.

ActivityTestRule

Esta regla proporciona pruebas funcionales de una sola actividad. La actividad en prueba se lanza antes de cada prueba anotada con @Test y antes de cualquier método anotado con @Before. Finaliza una vez que se completa la prueba y finalizan todos los métodos anotados con @After. Para acceder a la actividad en modo de prueba en la lógica de prueba, llama a ActivityTestRule.getActivity().

Nota: AndroidX Test incluye otra API, ActivityScenario, que se encuentra en fase Beta. Esta API funciona en una variedad de entornos de prueba y proporciona seguridad de subprocesos dentro de las pruebas que la usan.

Te recomendamos que pruebes esta API para ver cómo puede ayudarte a impulsar los ciclos de vida de las actividades de las app.

En el siguiente fragmento de código, se muestra cómo incorporar ActivityTestRule en la lógica de prueba:

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 regla proporciona un mecanismo simplificado para iniciar y cerrar el servicio antes y después de la prueba. También garantiza que el servicio se conectará con éxito cuando se inicie o se vincule un servicio. El servicio puede se puede vincular utilizando uno de los métodos auxiliares. Se detiene o desvincula automáticamente después de que se completa la prueba y finalizan los métodos con la anotación @After.

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();
        }
    }
    

Recursos adicionales

Para obtener más información sobre el uso de las reglas JUnit en las pruebas de Android, consulte los siguientes recursos.

Ejemplos