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
).
Es sind keine besonderen Schritte für die Übereinstimmung mit beiden Typen 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 kann in UiAutomator nur mit den passenden Deskriptoren (angezeigter Text, Inhaltsbeschreibung usw.) auf Zusammensetzbare zugegriffen werden. 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 bei zusammensetzbaren Funktionen nützlich, die keinen anderen eindeutigen Handle haben, z. B. scrollbare zusammensetzbare Funktionen (z. B. LazyColumn
).
Aktivieren Sie das semantische Attribut nur einmal hoch in der Hierarchie der zusammensetzbaren Funktionen, damit über UiAutomator auf alle verschachtelten zusammensetzbaren Funktionen mit Modifier.testTag
zugegriffen werden kann.
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 Testverfahren.
- Testgrundlagen:Hier findest du weitere Informationen zu den Kernkonzepten, die dem Testen von Android-Apps zugrunde liegen.
- Lokale Tests:Sie können einige Tests 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.
- Verschiedene Bildschirmgrößen testen:Da einige Geräte den Nutzern zur Verfügung stehen, solltest du verschiedene Bildschirmgrößen testen.
- Espresso: Diese Funktion ist zwar für Ansichtsbasierte Benutzeroberflächen gedacht, kann aber bei einigen Aspekten des Compose-Tests hilfreich sein.