Compose lässt sich in gängige Test-Frameworks einbinden.
Interoperabilität mit Espresso
In einer Hybridanwendung finden Sie Komponenten des Typs „Compose“ in Ansichtshierarchien und Ansichten in zusammensetzbaren Funktionen vom Typ „Compose“ (über die zusammensetzbare Funktion AndroidView
).
Für beide Typen sind keine speziellen Schritte erforderlich. Ansichten abgleichen Sie mit onView
von Espresso und Elemente vom Typ „Compose“ mit dem ComposeTestRule
ab.
@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ät mit UiAutomator
Standardmäßig können Sie über UiAutomator nur über die praktischen Beschreibungen (angezeigter Text, Inhaltsbeschreibung usw.) auf Composeables zugreifen. Wenn Sie auf eine zusammensetzbare Funktion zugreifen möchten, in der Modifier.testTag
verwendet wird, müssen Sie das semantische Attribut testTagsAsResourceId
für die Unterstruktur der jeweiligen zusammensetzbaren Funktion aktivieren. Das Aktivieren dieses Verhaltens ist nützlich für Elemente, die keinen anderen eindeutigen Handle haben, z. B. scrollbare Elemente (z. B. LazyColumn
).
Aktivieren Sie die semantische Property nur einmal hoch in der Hierarchie Ihrer Composeables, damit alle verschachtelten Composeables mit Modifier.testTag
über UiAutomator zugänglich sind.
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
}
}
Jede mit dem Modifier.testTag(tag)
zusammensetzbare Funktion kann mit By.res(resourceName)
mit demselben tag
wie resourceName
aufgerufen werden.
val device = UiDevice.getInstance(getInstrumentation())
val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.
Zusätzliche Ressourcen
- Apps unter Android testen: Die Haupt-Landingpage für Android-Tests bietet einen umfassenderen Überblick über die Grundlagen und Techniken des Testens.
- Grundlagen des Testens: Hier erfahren Sie mehr über die grundlegenden Konzepte beim Testen einer Android-App.
- Lokale Tests: Einige Tests können Sie lokal auf Ihrer eigenen Workstation ausführen.
- Instrumentierte Tests:Es empfiehlt sich, auch instrumentierte Tests auszuführen. Das sind Tests, die direkt auf dem Gerät ausgeführt werden.
- Kontinuierliche Integration: Mit der kontinuierlichen Integration können Sie Ihre Tests in Ihre Bereitstellungspipeline einbinden.
- Unterschiedliche Bildschirmgrößen testen: Da Nutzern eine Vielzahl von Geräten zur Verfügung steht, sollten Sie verschiedene Bildschirmgrößen testen.
- Espresso: Obwohl Espresso für viewbasierte UIs gedacht ist, können Kenntnisse zu Espresso auch für einige Aspekte von Compose-Tests hilfreich sein.