Interoperabilität

Compose lässt sich in gängige Test-Frameworks einbinden.

Interoperabilität mit Espresso

In einer hybriden Anwendung finden Sie „Compose“-Komponenten in Ansichtshierarchien und Ansichten in zusammensetzbaren Funktionen unter „Compose“ (über die zusammensetzbare Funktion AndroidView) ansehen.

Es sind keine besonderen Schritte für die Übereinstimmung mit beiden Typen erforderlich. Sie abgleichen Aufrufe mit onView von Espresso und „Verfassen“-Elemente mit 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ät mit UiAutomator

Auf die zusammensetzbaren Funktionen kann in UiAutomator standardmäßig nur über die folgenden Gruppen zugegriffen werden: Beschreibungen (angezeigter Text, Inhaltsbeschreibung usw.) Bei Bedarf 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 Eigenschaft nur einmal hoch in der Hierarchie der zusammensetzbaren Funktionen, um dass alle verschachtelten zusammensetzbaren Funktionen mit Modifier.testTag zugänglich sind 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
    }
}

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: Hier werden die wichtigsten Android-Tests aufgeführt. Landingpage einen umfassenderen Überblick über die Grundlagen und Verfahren der Tests bietet.
  • Testgrundlagen:Weitere Informationen Kernkonzepte beim Testen einer Android-App.
  • Lokale Tests:Sie können einige Tests ausführen. lokal auf Ihrer eigenen Workstation.
  • Instrumentierte Tests:Gut instrumentierte Tests durchführen. Das sind Tests, die direkt auf dem Gerät.
  • Continuous Integration: Mit Continuous Integration können Sie Ihre Tests in Ihre Bereitstellung einbinden zu erstellen.
  • Verschiedene Bildschirmgrößen testen:Mit Geräten verfügbar sind, sollten Sie auf verschiedenen Bildschirmen testen, Größen.
  • Espresso: Nur für Aufrufe auf Basis von Aufrufen Benutzeroberflächen und Espresso-Kenntnisse können bei einigen Aspekten von „Compose“ hilfreich sein Tests durchführen.