Interoperabilidad

Compose se integra en frameworks de prueba comunes.

Interoperabilidad con Espresso

En las apps híbridas, puedes encontrar los componentes de Compose dentro de las jerarquías de 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 onView de Espresso y elementos de Compose con 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, se puede acceder a los elementos componibles desde UiAutomator solo a través de su descriptores convenientes (texto visible, descripción del contenido, etcétera) Si quieres para acceder a cualquier elemento componible que use Modifier.testTag, debes habilitar la propiedad semántica testTagsAsResourceId para el elemento componible específico subárbol. Habilitar este comportamiento es útil para elementos componibles que no tienen ninguno Otro controlador único, como elementos componibles desplazables (por ejemplo, LazyColumn)

Habilita la propiedad semántica solo una vez alta en la jerarquía de tus elementos componibles para asegúrate de que se pueda acceder a todos los elementos componibles anidados con Modifier.testTag 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) con 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: Las pruebas principales de Android proporciona una visión más amplia de los fundamentos y las técnicas de prueba.
  • Aspectos básicos de las pruebas: Más información sobre los conceptos básicos de prueba de una app para Android.
  • Pruebas locales: Puedes ejecutar algunas pruebas. de forma local, en tu propia estación de trabajo.
  • Pruebas instrumentadas: Es bueno. practicar para ejecutar también pruebas de instrumentación. Es decir, las pruebas que se ejecutan directamente en el dispositivo.
  • Integración continua: La integración continua te permite integrar las pruebas en tu implementación. en una canalización de integración continua.
  • Prueba diferentes tamaños de pantalla: algunos dispositivos disponibles para los usuarios, debes probar diferentes pantallas tamaños.
  • Espresso: Aunque está diseñado para objetos View basados en IUs y el conocimiento de Espresso puede ser útil para algunos aspectos de Compose. y pruebas.