Únete a ⁠ #Android11: The Beta Launch Show el 3 de junio.

Multiprocess Espresso

A medida que tu app crezca, tal vez te resulte útil colocar algunos de los componentes de la app en un proceso diferente al proceso principal de tu app. 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 la app:

  • Un elemento <instrumentation> que define el proceso.
  • Un elemento <meta-data> que indica que quieres 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 marco de trabajo de Android que quieres que pruebe todos los procesos del paquete de tu app. Si quieres probar solo un subconjunto de los procesos de la app, puede 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:

  1. El marco de trabajo de Android crea e inicia un nuevo proceso para seguir la estructura de navegación de la app. Todos los procesos de Instrumentation incluyen una nueva instancia de AndroidJUnitRunner. En esta etapa, los 2 procesos de instrumentación no se pueden comunicar entre sí.
  2. Cada instancia de AndroidJUnitRunner registra Espresso como marco de trabajo de prueba.
  3. Las 2 instancias de AndroidJUnitRunner realizan un protocolo de enlace para establecer una conexión entre ellas. Al mismo tiempo, cada instancia de AndroidJUnitRunner 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.
  4. Cada instancia de AndroidJUnitRunner continúa buscando instancias de instrumentación recientemente agregadas y clientes del marco de trabajo de prueba, estableciendo canales de comunicación adicionales según sea necesario.

En la Figura 1, se muestra el resultado de este proceso:

Figura 1: Establecimiento de comunicación entre varios procesos de instrumentación utilizando Multiprocess Espresso

Recursos adicionales

Para obtener más información sobre este tema, consulta los siguientes recursos.