Interopérabilité

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

Interopérabilité avec Espresso

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

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

N'activez la propriété sémantique qu'une seule fois au sommet de la hiérarchie de vos composables afin de 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) est 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 des tests Android offre une vue plus large des principes fondamentaux et des techniques de test.
  • Principes fondamentaux des tests : découvrez les concepts de base des tests d'une application Android. Découvrez-en davantage sur les concepts de base des tests d'une application Android.
  • Tests locaux : vous pouvez exécuter certains tests localement, sur votre propre poste de travail.
  • Tests d'instrumentation: il est recommandé d'exécuter également des tests d'instrumentation. Il s'agit de tests qui s'exécutent directement sur l'appareil.
  • Intégration continue: L'intégration continue vous permet d'intégrer vos tests à votre pipeline de déploiement.
  • Tester différentes tailles d'écran: étant donné le nombre d'appareils disponibles pour les utilisateurs, vous devez effectuer des tests pour différentes tailles d'écran.
  • Espresso : bien qu'il soit destiné aux interfaces utilisateur basées sur des vues, Espresso peut être utile pour certains aspects des tests Compose.