Interopérabilité

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

Interopérabilité avec Espresso

Dans une application hybride, vous pouvez trouver les composants Compose dans les hiérarchies de vues et les vues dans des composables Compose (via le composable AndroidView).

Aucune étape particulière n'est requise pour correspondre à chaque type. Vous faites correspondre les vues avec le onView d'Espresso et les éléments Compose avec le 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 leurs descripteurs pratiques (texte affiché, description du contenu, etc.). Si vous souhaitez accéder à n'importe quel composable qui utilise Modifier.testTag, vous devez activer la propriété sémantique testTagsAsResourceId pour sa sous-arborescence. L'activation de ce comportement est utile pour les composables qui ne possèdent pas d'autre identifiant unique, tels que les composables à défilement (par exemple, LazyColumn).

Activez la propriété sémantique une seule fois en haut de votre hiérarchie de composables pour vous assurer que tous les composables imbriqués avec Modifier.testTag sont accessibles depuis 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 By.res(resourceName) avec 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: la page de destination principale de test Android offre une vue plus large des principes de base et des techniques de test.
  • Principes de base des tests:découvrez les concepts fondamentaux qui sous-tendent les tests d'une application Android.
  • Tests locaux:vous pouvez exécuter certains tests en local, sur votre propre poste de travail.
  • Tests d'instrumentation:il est recommandé d'exécuter également des tests d'instrumentation. c'est-à-dire des 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 pipeline de déploiement.
  • Testez différentes tailles d'écran:étant donné que de nombreux appareils sont disponibles pour les utilisateurs, vous devez tester différentes tailles d'écran.
  • Espresso: bien qu'il soit destiné aux UI basées sur les vues, la connaissance d'Espresso peut toujours être utile pour certains aspects des tests Compose.