Interopérabilité

Compose s'intègre aux frameworks de test courants.

Interopérabilité avec Espresso

Dans une application hybride, les composants Compose se trouvent dans des hiérarchies de vues. les vues dans les composables Compose (via le composable AndroidView).

Aucune étape particulière n'est requise pour correspondre à chaque type. Vous faites correspondre les vues avec onView d'Espresso, et éléments Compose avec 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()))
}

Interopérabilité avec UiAutomator

Par défaut, les composables ne sont accessibles depuis UiAutomator que via leur des descripteurs pratiques (texte affiché, description du contenu, etc.). Si vous voulez pour accéder à tout composable qui utilise Modifier.testTag, vous devez activer la propriété sémantique testTagsAsResourceId pour l'objet sous-arborescence. L'activation de ce comportement est utile pour les composables qui n'ont pas de un autre identifiant unique, comme des composables à défilement (par exemple, LazyColumn).

N'activez la propriété sémantique qu'une seule fois en haut de la hiérarchie de vos composables pour s'assurer que tous les composables imbriqués avec Modifier.testTag sont accessibles 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
    }
}

Tout composable avec Modifier.testTag(tag) peut être accessible à l'aide de la commande de By.res(resourceName) en utilisant le même tag que resourceName.

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

Autres ressources

  • Tester des applications sur Android: les principaux tests Android page de destination offre une vue d'ensemble des principes de base et des techniques de test.
  • Principes de base des tests:en savoir plus sur les concepts fondamentaux des tests d'une application Android.
  • Tests en local:vous pouvez exécuter des tests. localement, sur votre propre poste de travail.
  • Tests d'instrumentation:bon entraînez-vous à exécuter également des tests d'instrumentation. Autrement dit, les tests qui s'exécutent directement sur l'appareil.
  • Intégration continue: L'intégration continue vous permet d'intégrer vos tests dans votre déploiement pipeline.
  • Testez différentes tailles d'écran:avec de nombreux appareils mis à la disposition des utilisateurs, vous devez les tester pour différents écrans différentes tailles d'écran.
  • Espresso: bien qu'il soit destiné aux modèles basés sur les vues IU, la connaissance d'Espresso peut être utile pour certains aspects de Compose. tests.