Usa la API de Espresso Device para probar tu app cuando el dispositivo experimente cambios de configuración comunes, como la rotación y el despliegue de la pantalla. La API de Espresso Device te permite simular estos cambios de configuración en un dispositivo virtual y ejecuta tus pruebas de forma síncrona, por lo que solo se produce una acción o aserción de la IU a la vez y los resultados de las pruebas son más confiables. Si no tienes experiencia en la escritura de pruebas de IU con Espresso, consulta su documentación.
Para usar la API de Espresso Device, necesitas lo siguiente:
- Android Studio Iguana o versiones posteriores
- Complemento de Android para Gradle 8.3 o una versión posterior
- Android Emulator 33.1.10 o versiones posteriores
- Un dispositivo virtual Android que ejecute el nivel de API 24 o uno posterior
Configura tu proyecto para la API de Espresso Device
Para configurar tu proyecto de modo que admita la API de Espresso Device, haz lo siguiente:
Para permitir que la prueba pase comandos al dispositivo de prueba, agrega los permisos
INTERNET
yACCESS_NETWORK_STATE
al archivo de manifiesto en el conjunto de orígenesandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Habilita la marca experimental
enableEmulatorControl
en el archivogradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Habilita la opción
emulatorControl
en la secuencia de comandos de compilación a nivel del módulo:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
En la secuencia de comandos de compilación a nivel del módulo, importa la biblioteca de Espresso Device a tu proyecto:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Prueba los cambios de configuración comunes
La API de Espresso Device tiene varios estados de orientación de la pantalla y plegado que puedes usar para simular cambios en la configuración del dispositivo.
Prueba la rotación de pantalla
Este es un ejemplo de cómo probar qué sucede con tu app cuando gira la pantalla del dispositivo:
Primero, para establecer un estado inicial coherente, configura el dispositivo en modo vertical:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
Crea una prueba que configure el dispositivo en orientación horizontal durante la ejecución de la prueba:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Después de que la pantalla gire, verifica que la IU se adapte al nuevo diseño según lo esperado.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Prueba la app cuando se despliega la pantalla
A continuación, se muestra un ejemplo de cómo probar qué sucede con tu app si se ejecuta en un dispositivo plegable y se despliega la pantalla:
Primero, prueba con el dispositivo plegado llamando a
onDevice().setClosedMode()
. Asegúrate de que el diseño de tu app se adapte al ancho de pantalla compacto.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Para realizar la transición a un estado completamente desplegado, llama a
onDevice().setFlatMode()
. Comprueba que el diseño de la app se adapte a la clase de tamaño expandido.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Especifica qué dispositivos necesitan tus pruebas
Si ejecutas una prueba que realiza acciones de plegado en un dispositivo que no es plegable, es probable que la prueba falle. Para ejecutar solo las pruebas pertinentes para el dispositivo en ejecución, usa la anotación @RequiresDeviceMode
. El ejecutor de pruebas omite automáticamente la ejecución de pruebas en dispositivos que no admiten la configuración que se está probando. Puedes agregar la regla de requisitos del dispositivo a cada prueba o a una clase de prueba completa.
Por ejemplo, para especificar que una prueba solo se debe ejecutar en dispositivos que admiten el despliegue a una configuración plana, agrega el siguiente código @RequiresDeviceMode
a tu prueba:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}