A medida que se expanda tu app, 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 (API nivel 26) y versiones posteriores, permite probar correctamente las interacciones de la IU de la app que cruzan los límites del proceso de tu app mientras se mantienen las garantías de sincronización de Espresso.
Si usas 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:
app/build.gradle
dependencies {
...
androidTestImplementation 'androidx.test.espresso:espresso-remote:3.1.0'
}
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:
src/androidTest/AndroidManifest.xml
<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 de código anterior indica al framework de Android que quieres que pruebe todos los procesos del paquete de tu app. Si quieres probar solo un subconjunto de los procesos de tu 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 inicia el 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 la app. Cada proceso
Instrumentation
incluye una instancia nueva deAndroidJUnitRunner
. En esta etapa, los dos procesos de instrumentación no se pueden comunicar entre sí. - Cada instancia de
AndroidJUnitRunner
registra Espresso como su framework de prueba. - Las dos instancias de
AndroidJUnitRunner
realizan un protocolo de enlace para establecer una conexión entre ellas. Al mismo tiempo, cada instancia deAndroidJUnitRunner
conecta todos los clientes registrados, como Espresso, con sus respectivas contrapartes en otros procesos, para que estos clientes puedan formar un canal de comunicación directo entre sí. - Cada instancia de
AndroidJUnitRunner
continúa buscando instancias de instrumentación y clientes de framework recientemente incorporados, 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 guiado 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.