A medida que la app crece, tal vez te resulte útil colocar algunos de sus componentes en un proceso diferente del proceso principal de tu app. Para probar los componentes de la app en estas 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 hacer lo siguiente: probar sin problemas las interacciones de la IU de tu app que cruzan los procesos de tu app límites y, al mismo tiempo, mantiene las garantías de sincronización de Espresso.
Cuando uses Multiprocess Espresso, conserva los siguientes permisos y control de versiones consideraciones en mente:
- 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 procesos dentro de paquete de tu 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
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:
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 anterior le indica al framework de Android que deseas que pruebe
todos los procesos del paquete de tu app. Si quieres probar solo un subconjunto de tus
procesos de la app, puedes especificar una lista separada por comas dentro del
targetProcesses
en su lugar:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Cómo comprender la arquitectura de la herramienta
Cuando pruebes tu app e inicies su proceso predeterminado, podrás crear una IU interacción, como presionar un botón, que inicia una actividad en una actividad el proceso de administración de recursos. Luego, el sistema completa los siguientes pasos para habilitar el proceso cruzado. con Espresso:
- El framework de Android crea e inicia un nuevo proceso para seguir las
y la estructura de navegación. Cada proceso
Instrumentation
incluye una nueva instancia deAndroidJUnitRunner
En esta etapa, los 2 procesos de instrumentación no pueden comunicarse con cada uno. entre sí. - Cada
AndroidJUnitRunner
registra Espresso como framework de prueba. - Las 2 instancias de
AndroidJUnitRunner
realizan un protocolo de enlace para establecer una conexión entre ellos. Al mismo tiempo vez, cadaAndroidJUnitRunner
conecta a todos los clientes registrados, como Espresso, con sus respectivos en otros procesos para que estos clientes puedan formar una canal de comunicación entre ellos. - Cada
AndroidJUnitRunner
continua buscando instancias de instrumentación y pruebas con los clientes y establecer canales de comunicación adicionales según sea necesario.
En la figura 1, se muestra el resultado de este proceso:
![](https://developer.android.com/static/images/training/testing/multiprocess_espresso.png?authuser=0000&hl=es)
Recursos adicionales
Para obtener más información sobre este tema, consulta los siguientes recursos.
- Desarrollo basado en pruebas en Android con la asistencia para pruebas de Android Biblioteca video de la sesión de Google I/O 2017, a partir del minuto 36:41.