Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Multiprocess Espresso

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:

  1. 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 de AndroidJUnitRunner. En esta etapa, los dos procesos de instrumentación no se pueden comunicar entre sí.
  2. Cada instancia de AndroidJUnitRunner registra Espresso como su framework de prueba.
  3. Las dos instancias de AndroidJUnitRunner realizan un protocolo de enlace para establecer una conexión entre ellas. Al mismo tiempo, cada instancia de AndroidJUnitRunner 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í.
  4. 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:

Figura 1: Cómo establecer la comunicación entre varios procesos de instrumentación mediante Multiprocess Espresso

Recursos adicionales

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