À 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:
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:
<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:
- O framework do Android cria e inicia um novo processo para seguir a
estrutura de navegação. Cada
Instrumentation
processo inclui uma nova instânciaAndroidJUnitRunner
. Nesta fase, os dois processos de instrumentação não podem se comunicar entre si entre si. - Cada
AndroidJUnitRunner
registra o Espresso como seu framework de teste. - As duas instâncias
AndroidJUnitRunner
e executar um handshake para estabelecer uma conexão entre si. Com a mesma vez, cadaAndroidJUnitRunner
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. - 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:
Outros recursos
Para saber mais sobre esse assunto, consulte os recursos a seguir.
- Desenvolvimento voltado para testes no Android com suporte a testes do Android Biblioteca do Google I/O 2017, a partir de 36:41.