Utilisez l'API Espresso Device pour tester votre application lorsque l'appareil subit des les changements de configuration, comme la rotation et le dépliage de l'écran. L'Espresso L'API Device vous permet de simuler ces modifications de configuration sur un appareil virtuel et exécute vos tests de manière synchrone, de sorte qu'une seule action ou assertion d'UI se produit et que les résultats de vos tests sont plus fiables. Si vous débutez dans l'écriture d'UI avec Espresso, consultez la documentation correspondante.
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
- 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 soit compatible avec l'API Espresso Device, procédez comme suit:
Pour que le test réussisse les commandes à l'appareil de test, ajoutez l'élément Autorisations
INTERNET
etACCESS_NETWORK_STATE
sur le fichier manifeste dans l'ensemble de sourcesandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
Activez l'indicateur expérimental
enableEmulatorControl
dans la section Fichiergradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Activer l'option
emulatorControl
dans la compilation au niveau du module script: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.0-beta01") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.0-beta01' }
Effectuer des tests par rapport aux modifications de configuration courantes
L'API Espresso Device propose plusieurs orientations d'écran et états d'appareil pliable qui que vous pouvez utiliser pour simuler des modifications de configuration d'appareil.
Tester la rotation de l'écran
Voici un exemple illustrant comment tester ce qu'il advient de votre application lorsque l'écran de l'appareil effectue une rotation:
Tout d'abord, pour un état de départ cohérent, définissez l'appareil en mode Portrait. mode:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
Créer un test qui définit l'appareil en mode paysage pendant le test exécution:
@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'interface utilisateur 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 l'écran lorsque l'écran est déplié
Voici un exemple illustrant comment tester ce qu'il advient de votre application sur un appareil pliable. l'appareil et que l'écran se déplie:
Commencez par faire un test avec l'appareil plié en appelant la méthode
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 entièrement déplié, appelez
onDevice().setFlatMode()
Vérifiez que la mise en page de l'application s'adapte à à la classe de taille post-expansion.@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
un appareil pliable, le test échouera probablement. Pour n'exécuter que les tests pertinents
à 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 n'acceptent pas
configuration en cours de test. Vous pouvez ajouter la règle relative aux appareils requis à chaque test
ou une classe de test entière.
Par exemple, pour spécifier qu'un test ne doit être exécuté que sur des appareils compatibles avec
dans une configuration plate, ajoutez le code @RequiresDeviceMode
suivant :
à votre test:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}