Interoperabilità

Compose si integra con i framework di test comuni.

Interoperabilità con Espresso

In un'app ibrida, puoi trovare componenti Compose all'interno delle gerarchie di visualizzazione e le visualizzazioni all'interno dei composabili Compose (tramite il composable AndroidView).

Non sono necessari passaggi speciali per la corrispondenza di nessuno dei due tipi. Abbina le visualizzazioni con onView di Espresso e gli elementi di composizione 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 composabili sono accessibili da UiAutomator solo tramite i relativi descrittori utili (testo visualizzato, descrizione dei contenuti e così via). Se vuoi accedere a qualsiasi composable che utilizza Modifier.testTag, devi attivare la proprietà semantica testTagsAsResourceId per il sottoalbero del composable in questione. L'attivazione di questo comportamento è utile per i composabili che non hanno un altro handle univoco, ad esempio i composabili scorrevoli (ad esempio LazyColumn).

Attiva la proprietà semantica solo una volta in alto nella gerarchia dei componibili per assicurarti che tutti gli elementi 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 composable con il Modifier.testTag(tag) può essere accessibile con l'uso di By.res(resourceName) utilizzando lo stesso tag del resourceName.

val device = UiDevice.getInstance(getInstrumentation())

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

Risorse aggiuntive

  • Testare le app su Android: la pagina di destinazione principale per i test su Android offre una visione più ampia delle nozioni di base e delle tecniche di 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 localmente sulla tua workstation.
  • Test con strumenti: è buona prassi eseguire anche test con strumenti. ovvero i test eseguiti direttamente sul dispositivo.
  • Integrazione continua: l'integrazione continua ti consente di integrare i test nella pipeline di deployment.
  • Esegui test su diverse dimensioni dello schermo: con così tanti dispositivi a disposizione degli utenti, devi testare diverse dimensioni dello schermo.
  • Espresso: sebbene sia destinata alle UI basate su View, le conoscenze di Espresso possono comunque essere utili per alcuni aspetti del test di Compose.