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 e
le visualizzazioni all'interno dei composable di Compose (tramite il composable AndroidView
).
Non sono necessari passaggi speciali per la corrispondenza di entrambi i tipi. Abbina le visualizzazioni a
onView
di Espresso e gli elementi Compose a 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 composable sono accessibili da UiAutomator solo tramite i loro
descrittori pratici (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 specifico. L'attivazione di questo comportamento è utile per i componenti componibili che non hanno
altri handle unici, ad esempio i componenti componibili scorrevoli (ad esempio LazyColumn
).
Attiva la proprietà semantica solo una volta in alto nella gerarchia dei composable per
assicurarti che tutti i composable 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 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 dei test Android offre una visione più ampia dei fondamenti 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 strumentati: è buona norma eseguire anche test strumentati. ovvero test eseguiti direttamente sul dispositivo.
- Integrazione continua: L'integrazione continua consente di integrare i test nella pipeline di deployment.
- Testa diverse dimensioni dello schermo: con tanti dispositivi a disposizione degli utenti, devi eseguire test per diverse dimensioni dello schermo.
- Espresso: sebbene sia destinato alle UI basate sulla visualizzazione, la conoscenza di Espresso può comunque essere utile per alcuni aspetti dei test di Compose.