Utilizza l'API Espresso Device per testare la tua app quando il dispositivo subisce modifiche di configurazione comuni, come la rotazione e l'apertura dello schermo. L'API EspressoDevice consente di simulare queste modifiche di configurazione su un dispositivo virtuale ed esegue i test in modo sincrono, quindi viene eseguita una sola azione o asserzione dell'interfaccia utente alla volta e i risultati dei test sono più affidabili. Se non hai mai scritto test di UI con Espresso, consulta la relativa documentazione.
Per utilizzare l'API Espresso Device, devi disporre di quanto segue:
- Android Studio Iguana o versioni successive
- Plug-in Android per Gradle 8.3 o versioni successive
- Android Emulator 33.1.10 o versioni successive
- Dispositivo virtuale Android con livello API 24 o versioni successive
Configurare il progetto per l'API Espresso Device
Per configurare il progetto in modo che supporti l'API Espresso Device, svolgi i seguenti passaggi:
Per consentire al test di trasmettere comandi al dispositivo di test, aggiungi le autorizzazioni
INTERNET
eACCESS_NETWORK_STATE
al file manifest nell'insieme di originiandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Attiva il flag sperimentale
enableEmulatorControl
nelgradle.properties
file:android.experimental.androidTest.enableEmulatorControl=true
Attiva l'opzione
emulatorControl
nello script di compilazione a livello di modulo:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
Nello script di compilazione a livello di modulo, importa la libreria Espresso Device nel progetto:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Eseguire test in base a modifiche alla configurazione comuni
L'API Espresso Device dispone di più stati di orientamento dello schermo e di dispositivi 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 all'app quando lo schermo del dispositivo gira:
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)
Crea un test che imposti il dispositivo in orizzontale durante l'esecuzione del test:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
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:
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() ... }
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 stai eseguendo un test che esegue azioni di chiusura su un dispositivo che 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 programma di esecuzione dei test salta automaticamente l'esecuzione dei test sui dispositivi che non supportano la configurazione in fase di test. Puoi aggiungere la regola del requisito 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 la visualizzazione espansa in una configurazione piatta, aggiungi il seguente codice @RequiresDeviceMode
al test:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}