Interoperabilität

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.