Interoperabilidad

Compose se integra con frameworks de pruebas comunes.

Interoperabilidad con Espresso

En una app híbrida, puedes encontrar componentes de Compose dentro de jerarquías de vistas y vistas en 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 a través de Espresso's onView y de elementos de Compose mediante 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 mostrado, descripción del contenido, etcétera). Si quieres acceder a cualquier elemento componible que usa Modifier.testTag, debes habilitar la propiedad semántica testTagsAsResourceId para el subárbol específico de elementos componibles. Habilitar este comportamiento es útil para elementos componibles que no tienen ningún otro controlador único, como los que se pueden desplazar (por ejemplo, LazyColumn).

Habilita la propiedad semántica solo una vez que esté alta en la jerarquía de elementos componibles para asegurarte de que se pueda acceder a todos estos elementos 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 el Modifier.testTag(tag) mediante el uso de By.res(resourceName) con el mismo tag que el resourceName.

val device = UiDevice.getInstance(getInstrumentation())

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

Recursos adicionales

  • Cómo probar apps en Android: La página de destino principal de las pruebas de Android proporciona una visión más amplia de los aspectos básicos y las técnicas de las pruebas.
  • Aspectos básicos de las pruebas: Obtén más información sobre los conceptos básicos detrás de las pruebas de una app para Android.
  • Pruebas locales: Puedes ejecutar algunas pruebas de forma local en tu propia estación de trabajo.
  • Pruebas instrumentadas: También es una buena práctica ejecutar pruebas instrumentadas. Es decir, pruebas que se ejecutan directamente integrado en el dispositivo.
  • Integración continua: La integración continua te permite integrar tus pruebas en tu canalización de implementación.
  • Cómo probar diferentes tamaños de pantalla: Con tantos dispositivos disponibles para los usuarios, debes realizar pruebas para diferentes tamaños de pantalla.
  • Espresso: Si bien está diseñada para IUs basadas en View, el conocimiento de Espresso puede ser útil para algunos aspectos de las pruebas de Compose.