Multiprocess Espresso

À medida que seu app cresce, pode ser útil colocar alguns dos componentes dele em um processo diferente do principal do seu app. Para testar os componentes do app processos não padrão, será possível usar a funcionalidade do Multiprocess Espresso. Essa ferramenta, disponível no Android 8.0 (nível 26 da API) e versões mais recentes, permite que você Testar perfeitamente as interações de interface do seu app que passam pelo processo dele limites, mantendo as garantias de sincronização do Espresso.

Ao usar o Multiprocess Espresso, mantenha o controle de versão e o escopo a seguir considerações em mente:

  • O app precisa segmentar o Android 8.0 (API nível 26) ou posterior.
  • A ferramenta só pode testar os componentes do app que você incluir nos processos para o pacote do seu app. Ela não pode testar processos externos.

Usar a ferramenta

Para testar um processo no app usando o Multiprocess Espresso, adicione uma referência ao artefato espresso-remote no arquivo build.gradle do 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')
}

Também é necessário adicionar o seguinte ao manifesto androidTest do app:

  • Um elemento <instrumentation> que define o processo.
  • Um elemento <meta-data> que indica o uso do Multiprocess Espresso.

O snippet de código a seguir mostra como adicionar esses 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>

O snippet anterior indica ao framework do Android que você quer testar a ferramenta. cada processo no pacote do seu app. Se você quiser testar apenas um subconjunto processos do app, especifique uma lista separada por vírgulas nos targetProcesses:

<instrumentation
    ...
    android:targetProcesses=
            "androidx.test.mytestapp:myFirstAppProcessToTest,
             androidx.test.mytestapp:mySecondAppProcessToTest" ... />

Compreender a arquitetura da ferramenta

Ao testar o app e iniciar o processo padrão, você pode executar uma interface interação, como o pressionamento de um botão, que inicia uma atividade em uma de desenvolvimento de software. O sistema conclui as etapas a seguir para ativar a autenticação de processos cruzados de testes usando o Espresso:

  1. O framework do Android cria e inicia um novo processo para seguir a estrutura de navegação. Cada Instrumentation processo inclui uma nova instância AndroidJUnitRunner. Nesta fase, os dois processos de instrumentação não podem se comunicar entre si entre si.
  2. Cada AndroidJUnitRunner registra o Espresso como seu framework de teste.
  3. As duas instâncias AndroidJUnitRunner e executar um handshake para estabelecer uma conexão entre si. Com a mesma vez, cada AndroidJUnitRunner conecta todos os clientes registrados, como o Espresso, aos respectivos outras partes em outros processos, para que esses clientes possam formar canal de comunicação entre eles.
  4. Cada AndroidJUnitRunner continua a procurar instâncias de instrumentação recém-adicionadas e testes estrutura dos clientes, estabelecendo outros canais de comunicação conforme necessário.

A Figura 1 ilustra o resultado desse processo:

Figura 1. Estabelecer comunicação entre vários de instrumentação usando o Multiprocess Espresso.

Outros recursos

Para saber mais sobre esse assunto, consulte os recursos a seguir.