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 di visualizzazione
all'interno dei componenti componibili di Compose (tramite il componibile 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 gli elementi componibili che non hanno
altri handle univoci, come gli elementi componibili scorrevoli (ad esempio LazyColumn
).
Attiva la proprietà semantica solo una volta nella gerarchia dei composabili per assicurarti che tutti i composabili 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 con l'uso
di 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
- 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.
- Concetti fondamentali dei test: scopri di più sui concetti fondamentali alla base dei 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 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: destinato ai contenuti basati sulle visualizzazioni UI, le conoscenze di Espresso possono essere ancora utili per alcuni aspetti di Compose test.