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, come la rotazione e l'apertura dello schermo. L'API Espresso Device ti consente di simulare queste modifiche alla configurazione su un dispositivo virtuale ed esegue i test in modo sincrono, in modo che venga eseguita una sola azione o asserzione dell'interfaccia utente alla volta e i risultati dei test siano più affidabili. Se non hai mai scritto test dell'interfaccia utente con Espresso, consulta la relativa documentazione.

Per utilizzare l'API Espresso Device, devi avere:

  • Android Studio Iguana o versioni successive
  • Plug-in Android per Gradle versione 8.3 o successive
  • emulatore Android 33.1.10 o versioni successive
  • Dispositivo virtuale Android con livello API 24 o superiore

Configurare 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 INTERNET e ACCESS_NETWORK_STATE autorizzazioni al file manifest nel androidTest set di risorse:

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

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

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Alla moda

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

    Kotlin

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

    Alla moda

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

Testare le modifiche comuni alla configurazione

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

Testare la rotazione dello schermo

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

  1. Innanzitutto, per uno stato iniziale coerente, imposta il dispositivo in modalità Ritratto:

      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 l'orientamento orizzontale del dispositivo durante l'esecuzione del test:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. Dopo la rotazione dello schermo, verifica che l'interfaccia utente 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()
      }
      

Testare l'apertura dello schermo

Ecco un esempio di come testare 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 in stato di chiusura chiamando onDevice().setClosedMode(). Assicurati che il layout della tua 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 a la classe di dimensioni espansa.

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

Specificare 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 al dispositivo in esecuzione, utilizza l'annotazione @RequiresDeviceMode. Il test runner salta automaticamente l'esecuzione dei test sui dispositivi che non supportano la configurazione in fase di test. Puoi aggiungere la regola dei requisiti del dispositivo a ogni test o a un'intera classe di test.

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

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