Reglas de JUnit4 con AndroidX Test

AndroidX Test incluye un conjunto de reglas JUnit para usar con AndroidJUnitRunner. Las reglas JUnit proporcionan más flexibilidad y reducen el código estándar requerido en las pruebas. Por ejemplo, se pueden usar para iniciar una actividad específica.

Regla de situación de actividad

Esta regla proporciona pruebas funcionales de una sola actividad. La regla inicia la actividad elegida antes de cada prueba anotada con @Test, así como antes de cualquier método anotado con @Before. La regla finaliza la actividad después de que se completa la prueba y finalizan todos los métodos anotados con @After. Para acceder a la actividad determinada en la lógica de prueba, proporciona una devolución de llamada que se pueda ejecutar en ActivityScenarioRule.getScenario().onActivity().

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

Kotlin


@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.
   }
}

Java


public class MyClassTest {
    @Rule
    public ActivityScenarioRule<MyClass> activityRule =
            new ActivityScenarioRule(MyClass.class);

    @Test
    public void myClassMethod_ReturnsTrue() { ... }
}

ServiceTestRule

Esta regla proporciona un mecanismo simplificado para iniciar el servicio antes de las pruebas y cerrarlo antes y después. Puedes iniciar o vincular el servicio con uno de los métodos auxiliares. Se detiene o desvincula automáticamente después de que finaliza la prueba y de que finalizan los métodos anotados con @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, consulta los siguientes recursos.

Documentación

Ejemplos