Partager via


Écrire des tests Jetpack Compose pour les appareils pliables

Jetpack Compose fournit une API de test qui peut être utilisée pour tester vos dispositions, à l’instar de l’utilisation d’Expresso avec le système d’affichage traditionnel. Le Gestionnaire de fenêtres Jetpack fournit également une bibliothèque de test qui permet de simuler facilement des objets . Grâce à ces ressources, vous pouvez écrire des tests d’interface utilisateur instrumentés dans vos projets Compose pour des appareils pliables et double écran.

Bibliothèque ComposeTesting

Pour réduire la quantité de code nécessaire à l’écriture de tests pour appareils pliables, vous pouvez également utiliser la bibliothèque ComposeTesting, qui fait partie de notre Kit de test. Cette bibliothèque contient des méthodes d’utilitaire pour simuler des objets FoldingFeature et d’autres fonctionnalités utiles pour les tests d’interface utilisateur Compose, notamment des méthodes d’assistance de mouvement de balayage et de ressource de chaîne.

Pour utiliser la bibliothèque ComposeTesting dans vos tests, veillez à cliquer sur l’onglet Avec la bibliothèque ComposeTesting pour obtenir les extraits de code de cet article.

Configuration

  1. Créez un fichier de classe de test dans le répertoire androidTest. C’est là que vous ajouterez les extraits de code pour les tests et les règles de test.

  2. Vérifiez que vous disposez du référentiel mavenCentral() dans votre fichier build.gradle de premier niveau :

    allprojects {
        repositories {
            google()
            mavenCentral()
         }
    }
    
  3. Ajoutez les dépendances suivantes au fichier build.gradle de niveau module (la version actuelle peut être différente de ce qui est illustré ici) :

    androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.3.0"
    androidTestImplementation "androidx.window:window-testing:1.0.0"
    
    // Only necessary if Jetpack Window Manager isn't imported for implementation
    androidTestImplementation "androidx.window:window:1.0.0"
    
  4. Vérifiez que est compileSdkVersion défini sur API 33 et que est targetSdkVersion défini sur API 32 ou version ultérieure dans votre fichier build.gradle au niveau du module :

    android { 
        compileSdkVersion 33
    
        defaultConfig { 
            targetSdkVersion 32
        } 
        ... 
    }
    
  5. Créez un TestRule qui peut effectuer des vérifications Compose et simuler des fonctionnalités de repli. Pour ce faire, vous pouvez chaîner deux règles : une règle d’éditeur WindowLayoutInfo et une règle de test Android Compose.

    private val composeTestRule = createAndroidComposeRule<MainActivity>()
    private val publisherRule = WindowLayoutInfoPublisherRule()
    
    @get:Rule
    val testRule: TestRule
    
    init {
        testRule = RuleChain.outerRule(publisherRule).around(composeTestRule)
    }
    

Comment écrire des tests

Pour écrire un test Compose pour les appareils pliables et double écran, suivez les quatre étapes suivantes :

  1. Définir le contenu du test
  2. Simuler un FoldingFeature
  3. Rechercher le ou les nœuds à tester
  4. Effectuer des assertions ou des actions sur le(s) nœud(s)

Les extraits de code ci-dessous montrent un exemple de test qui vérifie si les éléments de texte « pane 1 » et « pane 2 » sont affichés dans le composable TwoPaneSample quand un élément vertical FoldingFeature est présent.

@Test
fun sample_verticalFoldingFeature_showsTwoPanes() {
    // 1. Optional: set the content of the test (default is MainActivity content)
    composeTestRule.activity.setContent {
        TwoPaneSample()
    }

    // 2. Simulate a vertical FoldingFeature
    composeTestRule.activityRule.scenario.onActivity { activity ->
        val verticalFoldingFeature = FoldingFeature(
            activity = activity,
            orientation = FoldingFeature.Orientation.VERTICAL
        )
        val windowLayoutInfo = TestWindowLayoutInfo(listOf(verticalFoldingFeature))
        publisherRule.overrideWindowLayoutInfo(windowLayoutInfo)
    }

    // 3. Find the nodes to test and 4. Perform assertions on the nodes
    composeTestRule.onNodeWithText("pane 1").assertIsDisplayed()
    composeTestRule.onNodeWithText("pane 2").assertIsDisplayed()
}

Lors de l’écriture de vos propres tests, vous pouvez personnaliser chaque étape en fonction de vos besoins. Tout composable peut être placé dans le setContent lambda et vous pouvez modifier la position, la taille, l’orientation et l’état de setContent.

Ressources

Pour en savoir plus sur les tests avec Jetpack Compose et Jetpack Window Manager, reportez-vous aux ressources suivantes :