Reglas de JUnit4 con AndroidX Test

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

Regla ActivitySituación

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 cualquier método anotado con @Before La regla finaliza la actividad después de que se completa la prueba y todos los métodos anotados con @After finalizan. Para acceder a los en tu lógica de prueba, proporciona una devolución de llamada ejecutable ActivityScenarioRule.getScenario().onActivity()

En el siguiente fragmento de código, se demuestra cómo incorporar ActivityScenarioRule en tu 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 brinda un mecanismo simplificado para iniciar el servicio antes de la y apágalo 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 la prueba. se completa y todos los métodos anotados con @After finalizaron.

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 reglas JUnit en pruebas de Android, consulta el los siguientes recursos.

Documentación

Ejemplos