A medida que tu app se expanda, tal vez te resulte útil colocar algunos de sus componentes en un proceso diferente del principal. Para probar los componentes de la app en estos procesos no predeterminados, puedes usar la funcionalidad de Multiprocess Espresso. Esta herramienta, disponible en Android 8.0 (nivel de API 26) y versiones posteriores, te permite probar sin problemas las interacciones de la IU de tu app que cruzan los límites del proceso de tu app y, al mismo tiempo, mantener las garantías de sincronización de Espresso.
Cuando uses Multiprocess Espresso, ten en cuenta las siguientes consideraciones sobre el control de versiones y el alcance:
- Tu app debe apuntar a Android 8.0 (API nivel 26) o una versión posterior.
- La herramienta solo puede probar los componentes de la app que incluyas en los procesos dentro del paquete de la app. No puedes probar los procesos externos.
Cómo usar la herramienta
Para probar un proceso en tu app con Multiprocess Espresso, agrega una referencia al artefacto espresso-remote en el archivo build.gradle
de tu app:
Groovy
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
También debes agregar lo siguiente al manifiesto androidTest
de tu app:
- Un elemento
<instrumentation>
que define el proceso. - Un elemento
<meta-data>
que indica que deseas usar Multiprocess Espresso.
En el siguiente fragmento de código, se muestra cómo agregar estos elementos:
<manifest ... package="androidx.test.mytestapp.tests"> <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" /> <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="androidx.test.mytestapp" android:targetProcesses="*"> <meta-data android:name="remoteMethod" android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" /> </instrumentation> </manifest>
El fragmento anterior le indica al framework de Android que quieres que pruebe todos los procesos del paquete de tu app. Si solo quieres probar un subconjunto de los procesos de la app, puedes especificar una lista separada por comas dentro del elemento targetProcesses
:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Cómo comprender la arquitectura de la herramienta
Cuando pruebas tu app e inicias su proceso predeterminado, puedes realizar una interacción de la IU, como presionar un botón, que inicia una actividad en un proceso secundario. Luego, el sistema completa los siguientes pasos para habilitar las pruebas de proceso cruzado usando Espresso:
- El framework de Android crea e inicia un nuevo proceso para seguir la estructura de navegación de tu app. Cada proceso
Instrumentation
incluye una instancia nueva deAndroidJUnitRunner
. En esta etapa, los 2 procesos de instrumentación no se pueden comunicar entre sí. - Cada instancia de
AndroidJUnitRunner
registra Espresso como su framework de prueba. - Las 2 instancias de
AndroidJUnitRunner
realizan un protocolo de enlace para establecer una conexión entre ellas. Al mismo tiempo, cada instancia deAndroidJUnitRunner
conecta a todos los clientes registrados, como Espresso, con sus contrapartes respectivas en otros procesos para que estos clientes puedan formar un canal de comunicación directo entre ellos. - Cada instancia de
AndroidJUnitRunner
continúa buscando instancias de instrumentación y clientes de framework de prueba recientemente agregados, estableciendo canales de comunicación adicionales según sea necesario.
En la figura 1, se muestra el resultado de este proceso:
Recursos adicionales
Para obtener más información sobre este tema, consulta los siguientes recursos.
- Desarrollo controlado por pruebas en Android con el video de sesión de la biblioteca de compatibilidad de pruebas de Android de Google I/O 2017, a partir del minuto 36:41.