Utilisez l'API Espresso Device pour tester votre application lorsque l'appareil subit des modifications de configuration courantes, telles que la rotation et le dépliage de l'écran. L'API Espresso Device vous permet de simuler ces modifications de configuration sur un appareil virtuel et d'exécuter vos tests de manière synchrone. Ainsi, une seule action ou assertion de l'UI se produit à la fois, et les résultats de vos tests sont plus fiables. Si vous débutez avec l'écriture de tests d'UI avec Espresso, consultez sa documentation.
Pour utiliser l'API Espresso Device, vous avez besoin des éléments suivants:
- Android Studio Iguana ou version ultérieure
- Plug-in Android Gradle 8.3 ou version ultérieure
- Android Emulator 33.1.10 ou version ultérieure
- Un appareil virtuel Android exécutant le niveau d'API 24 ou supérieur
Configurer votre projet pour l'API Espresso Device
Pour configurer votre projet afin qu'il prenne en charge l'API Espresso Device, procédez comme suit:
Pour permettre au test de transmettre des commandes à l'appareil de test, ajoutez les autorisations
INTERNET
etACCESS_NETWORK_STATE
au fichier manifeste de l'ensemble de sourcesandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Activez l'indicateur expérimental
enableEmulatorControl
dans le fichiergradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Activez l'option
emulatorControl
dans le script de compilation au niveau du module:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
Dans le script de compilation au niveau du module, importez la bibliothèque Espresso Device dans votre projet:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Tester les modifications de configuration courantes
L'API Espresso Device propose plusieurs orientations d'écran et états pliables que vous pouvez utiliser pour simuler les modifications de configuration de l'appareil.
Tester la rotation de l'écran
Voici un exemple de test de ce qui se passe dans votre application lorsque l'écran de l'appareil pivote:
Tout d'abord, pour un état de départ cohérent, définissez l'appareil en mode portrait:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
Créez un test qui définit l'orientation de l'appareil en mode Paysage pendant l'exécution du test:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Une fois l'écran pivoté, vérifiez que l'UI s'adapte à la nouvelle mise en page comme prévu.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Tester le déploiement de l'écran
Voici un exemple de test de ce qui se passe dans votre application si elle se trouve sur un appareil pliable et que l'écran se déplie:
Commencez par tester l'appareil lorsqu'il est plié en appelant
onDevice().setClosedMode()
. Assurez-vous que la mise en page de votre application s'adapte à la largeur d'écran compacte.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Pour passer à un état complètement déplié, appelez
onDevice().setFlatMode()
. Vérifiez que la mise en page de l'application s'adapte à la classe de taille étendue.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Spécifier les appareils dont vos tests ont besoin
Si vous exécutez un test qui effectue des actions de pliage sur un appareil qui n'est pas pliable, le test échouera probablement. Pour n'exécuter que les tests pertinents pour l'appareil en cours d'exécution, utilisez l'annotation @RequiresDeviceMode
. Le lanceur de test ignore automatiquement l'exécution des tests sur les appareils qui ne sont pas compatibles avec la configuration testée. Vous pouvez ajouter la règle d'exigences concernant les appareils à chaque test ou à une classe de test entière.
Par exemple, pour spécifier qu'un test ne doit être exécuté que sur les appareils compatibles avec le déploiement dans une configuration plate, ajoutez le code @RequiresDeviceMode
suivant à votre test:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}