À medida que o app cresce, pode ser útil colocar alguns componentes dele em outro processo que não o principal do app. Para testar os componentes do app nesses processos não padrão, use a funcionalidade Multiprocess Espresso. Essa ferramenta, disponível no Android 8.0 (API nível 26) e posterior, permite testar tranquilamente as interações da IU que ultrapassam os limites do processo do app, sem perder as garantias de sincronização do Espresso.
Ao usar o Multiprocess Espresso, lembre-se das seguintes considerações sobre controle de versões e escopo:
- 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ê inclui nos processos dentro do pacote dele. 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
dependencies {
...
androidTestImplementation 'androidx.test.espresso:espresso-remote:3.1.0'
}
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 para o framework do Android que você quer que ele teste todos os processos no pacote do app. Para testar apenas um subconjunto dos processos do app, especifique uma lista separada por vírgulas no elemento targetProcesses
:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Compreender a arquitetura da ferramenta
Ao testar seu app e iniciar o processo padrão, você pode realizar uma interação da IU, como o pressionamento de um botão, que inicia uma atividade em um processo secundário. O sistema conclui as seguintes etapas para ativar o teste entre processos usando o Espresso:
- O framework do Android cria e inicia um novo processo para seguir a estrutura de navegação do app. Cada processo de
Instrumentation
inclui uma nova instância deAndroidJUnitRunner
. Nesta fase, os dois processos de instrumentação não podem se comunicar entre si. - Cada instância de
AndroidJUnitRunner
registra o Espresso como o framework de teste. - As duas instâncias de
AndroidJUnitRunner
realizam um handshake para estabelecer uma conexão entre si. Ao mesmo tempo, cada instância deAndroidJUnitRunner
conecta todos os clientes registrados, como o Espresso, com os respectivos correspondentes em outros processos. Assim, esses clientes podem formar um canal de comunicação direta entre si. - Cada instância de
AndroidJUnitRunner
continua procurando instâncias de instrumentação recém-adicionadas e clientes do framework de teste, estabelecendo outros canais de comunicação, conforme necessário.
A Figura 1 ilustra o resultado desse processo:

Outros recursos
Para saber mais sobre esse assunto, consulte os recursos a seguir.
- Vídeo da sessão Desenvolvimento voltado para testes no Android com a Biblioteca de Suporte Android Testing (em inglês) do Google I/O 2017, a partir de 36:41.