Compose lässt sich in gängige Test-Frameworks einbinden.
Interoperabilität mit Espresso
In einer Hybrid-App finden Sie Compose-Komponenten in Ansichtshierarchien und Ansichten in Compose-Kompositen (über das AndroidView
-Komposit).
Für beide Typen sind keine speziellen Schritte erforderlich. Ansichten werden mit dem onView
von Espresso abgeglichen und Elemente mit dem ComposeTestRule
komponiert.
@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
Auf die zusammensetzbaren Funktionen kann in UiAutomator standardmäßig nur über die folgenden Gruppen zugegriffen werden:
Beschreibungen (angezeigter Text, Inhaltsbeschreibung usw.) Wenn Sie möchten
Um auf zusammensetzbare Funktionen zuzugreifen, in denen Modifier.testTag
verwendet wird, müssen Sie
Semantik-Attribut testTagsAsResourceId
für die jeweilige zusammensetzbare Funktion
Unterstruktur. Das Aktivieren dieses Verhaltens ist nützlich für zusammensetzbare Funktionen, die keine
Andere eindeutige Ziehpunkte wie scrollbare zusammensetzbare Funktionen (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 der Funktion
von By.res(resourceName)
mit derselben tag
wie resourceName
.
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:Sie können einige Tests ausführen. lokal auf Ihrer eigenen Workstation.
- Instrumentierte Tests: Es empfiehlt sich, auch instrumentierte Tests auszuführen. Das sind Tests, die direkt auf dem Gerät ausgeführt werden.
- Continuous Integration: Mit Continuous Integration können Sie Ihre Tests in Ihre Bereitstellungspipeline einbinden.
- Verschiedene Bildschirmgrößen testen:Mit Geräten verfügbar sind, sollten Sie auf verschiedenen Bildschirmen testen, Größen.
- Espresso: Obwohl Espresso für viewbasierte UIs gedacht ist, können Kenntnisse zu Espresso für einige Aspekte von Compose-Tests hilfreich sein.