Eseguire test sulle modifiche alla configurazione dello schermo con l'API Espresso Device

Utilizza l'API Espresso Device per testare la tua app quando il dispositivo subisce modifiche comuni alla configurazione, ad esempio la rotazione e l'apertura dello schermo. L'API Espresso Device consente di simulare queste modifiche alla configurazione su un dispositivo virtuale ed eseguire i test in modo sincrono, così viene eseguita una sola azione o asserzione dell'interfaccia utente alla volta e i risultati del test sono più affidabili. Se non hai mai scritto test UI con Espresso, consulta la relativa documentazione.

Per utilizzare l'API Espresso Device, occorre quanto segue:

  • Android Studio Iguana o versioni successive
  • Plug-in Android Gradle 8.3 o versioni successive
  • Emulatore Android 33.1.10 o versioni successive
  • Dispositivo virtuale Android che esegue il livello API 24 o versioni successive

Configura il progetto per l'API Espresso Device

Per configurare il progetto in modo che supporti l'API Espresso Device:

  1. Per consentire al test di passare i comandi al dispositivo di test, aggiungi le autorizzazioni INTERNET e ACCESS_NETWORK_STATE al file manifest nel set di origine androidTest:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. Attiva il flag sperimentale enableEmulatorControl nel file gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. Abilita l'opzione emulatorControl nello script di build a livello di modulo:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    trendy

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. Nello script di compilazione a livello di modulo, importa la libreria di dispositivi Espresso nel progetto:

    Kotlin

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:3.5.1")
      }
      

    trendy

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:3.5.1'
      }
      

Test delle modifiche comuni alla configurazione

L'API Espresso Device ha più orientamenti e stati pieghevoli che puoi utilizzare per simulare modifiche alla configurazione del dispositivo.

Testa rispetto alla rotazione dello schermo

Ecco un esempio di come verificare cosa succede alla tua app quando lo schermo del dispositivo ruota:

  1. Innanzitutto, per uno stato di avvio coerente, imposta il dispositivo in modalità verticale:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. Crea un test che imposti il dispositivo in orientamento orizzontale durante l'esecuzione del test:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. Dopo che lo schermo ruota, verifica che l'UI si adatti al nuovo layout come previsto.

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

Test rispetto allo schermo che si apre

Ecco un esempio di come verificare cosa succede alla tua app se si trova su un dispositivo pieghevole e lo schermo si apre:

  1. Innanzitutto, esegui il test con il dispositivo chiuso chiamando onDevice().setClosedMode(). Assicurati che il layout dell'app si adatti alla larghezza dello schermo compatto.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. Per passare a uno stato completamente aperto, chiama onDevice().setFlatMode(). Verifica che il layout dell'app si adatti alla classe di dimensioni espansa.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        ...
        onDevice().setFlatMode()
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist()
      }
      

Specifica i dispositivi necessari per i test

Se esegui un test che esegue azioni di piegatura su un dispositivo non pieghevole, è probabile che il test non vada a buon fine. Per eseguire solo i test pertinenti per il dispositivo in esecuzione, utilizza l'annotazione @RequiresDeviceMode. L'esecutore del test salta automaticamente i test sui dispositivi che non supportano la configurazione in fase di test. Puoi aggiungere la regola per i requisiti del dispositivo a ogni test o a un'intera classe di test.

Ad esempio, per specificare che un test deve essere eseguito solo su dispositivi che supportano l'espansione in una configurazione flat, aggiungi il seguente codice @RequiresDeviceMode al test:

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}