Interoperabilità

Compose si integra con i framework di test comuni.

Interoperabilità con Espresso

In un'app ibrida, puoi trovare i componenti di Compose all'interno delle gerarchie e delle visualizzazioni all'interno degli elementi componibili di Compose (tramite l'elemento componibile AndroidView).

Non sono necessari passaggi speciali per trovare corrispondenze con nessuno dei due tipi. Le visualizzazioni vengono associate agli elementi onView di Espresso e agli elementi 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()))
}

Interoperabilità con UiAutomator

Per impostazione predefinita, i componibili sono accessibili da UiAutomator solo tramite i relativi descrittori utili (testo visualizzato, descrizione dei contenuti e così via). Se vuoi accedere a qualsiasi componibile che utilizza Modifier.testTag, devi abilitare la proprietà semantica testTagsAsResourceId per il sottoalbero del componibile specifico. L'attivazione di questo comportamento è utile per gli elementi componibili che non hanno altri handle univoci, come gli elementi componibili scorrevoli (ad esempio LazyColumn).

Abilita la proprietà semantica solo una volta in cima alla gerarchia dei componibili per assicurarti che tutti i componibili nidificati con Modifier.testTag siano accessibili da 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
    }
}

Qualsiasi componibile con Modifier.testTag(tag) può essere accessibile utilizzando By.res(resourceName) utilizzando lo stesso tag di resourceName.

val device = UiDevice.getInstance(getInstrumentation())

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

Risorse aggiuntive

  • App di test su Android: la pagina di destinazione principale per i test di Android offre una visione più ampia sulle tecniche e sui concetti fondamentali dei test.
  • Nozioni di base sui test: scopri di più sui concetti fondamentali alla base del test di un'app per Android.
  • Test locali: puoi eseguire alcuni test in locale, sulla tua workstation.
  • Test strumentati: è buona norma eseguire anche test con strumentazione. ovvero test eseguiti direttamente sul dispositivo.
  • Integrazione continua: l'integrazione continua consente di integrare i test nella pipeline di deployment.
  • Prova dimensioni dello schermo diverse: dato che sono disponibili molti dispositivi per gli utenti, dovresti testare schermi di dimensioni diverse.
  • Espresso: sebbene destinato alle UI basate su View, la conoscenza di Espresso può comunque essere utile per alcuni aspetti dei test di Compose.