Interoperabilidad

Compose se integra en frameworks de prueba comunes.

Interoperabilidad con Espresso

En una app híbrida, puedes encontrar componentes de Compose dentro de las jerarquías de vistas y de las vistas dentro de los elementos componibles de Compose (a través del elemento componible AndroidView).

No es necesario realizar pasos especiales para coincidir con alguno de los tipos. Haz coincidir las vistas con el elemento onView de Espresso y los elementos de Compose con el ComposeTestRule.

@Test
fun androidViewInteropTest() {
    // Check the initial state of a TextView that depends on a Compose state.
    Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
    // Click on the Compose button that changes the state.
    composeTestRule.onNodeWithText("Click here").performClick()
    // Check the new value.
    Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}

Interoperabilidad con UiAutomator

De forma predeterminada, solo se puede acceder a los elementos componibles desde UiAutomator mediante sus descriptores convenientes (texto visible, descripción del contenido, etcétera). Si deseas acceder a cualquier elemento componible que use Modifier.testTag, debes habilitar la propiedad semántica testTagsAsResourceId para el subárbol del elemento componible específico. Habilitar este comportamiento resulta útil para los elementos componibles que no tienen ningún otro controlador único, como los elementos desplazables (por ejemplo, LazyColumn).

Habilita la propiedad semántica solo una vez alta en la jerarquía de elementos componibles para asegurarte de que se pueda acceder a todos los elementos componibles anidados con Modifier.testTag desde UiAutomator.

Scaffold(
    // Enables for all composables in the hierarchy.
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
){
    // Modifier.testTag is accessible from UiAutomator for composables nested here.
    LazyColumn(
        modifier = Modifier.testTag("myLazyColumn")
    ){
        // Content
    }
}

Se puede acceder a cualquier elemento componible con Modifier.testTag(tag) usando By.res(resourceName) con el mismo tag que resourceName.

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

Recursos adicionales

  • Prueba apps en Android: En la página de destino principal de las pruebas de Android, se proporciona una vista más amplia de los aspectos básicos y las técnicas de prueba.
  • Aspectos básicos de las pruebas: Obtén más información sobre los conceptos básicos de las pruebas de apps para Android.
  • Pruebas locales: Puedes ejecutar algunas pruebas de manera local en tu propia estación de trabajo.
  • Pruebas instrumentadas: Se recomienda ejecutar también pruebas de instrumentación. Es decir, pruebas que se ejecutan directamente en el dispositivo.
  • Integración continua: La integración continua te permite integrar las pruebas en la canalización de implementación.
  • Prueba diferentes tamaños de pantalla: Con algunos dispositivos disponibles para los usuarios, debes probar diferentes tamaños de pantalla.
  • Espresso: Si bien está diseñado para las IU basadas en View, el conocimiento de Espresso puede ser útil para algunos aspectos de las pruebas de Compose.