À mesure que votre application se développe, vous pouvez trouver utile de placer certains de ses composants dans un processus autre que le processus principal de votre application. Pour tester les composants d'application dans ces processus non définis par défaut, vous pouvez utiliser la fonctionnalité Multiprocess Espresso. Cet outil, disponible sur Android 8.0 (niveau d'API 26) et versions ultérieures, vous permet de tester facilement les interactions de l'interface utilisateur de votre application qui franchissent les limites de processus de votre application tout en conservant les garanties de synchronisation d'Espresso.
Lorsque vous utilisez Multiprocess Espresso, gardez à l'esprit les points suivants concernant le versionnage et le champ d'application :
- Votre application doit cibler Android 8.0 (niveau d'API 26) ou version ultérieure.
- L'outil ne peut tester que les composants d'application que vous incluez dans les processus du package de votre application. Il ne peut pas tester les processus externes.
Utiliser l'outil
Pour tester un processus dans votre application à l'aide de Multiprocess Espresso, ajoutez une référence à l'artefact espresso-remote dans le fichier build.gradle
de votre application :
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') }
Vous devez également ajouter les éléments suivants au fichier manifeste androidTest
de votre application :
- Élément
<instrumentation>
qui définit le processus. - Un élément
<meta-data>
indiquant que vous souhaitez utiliser Multiprocess Espresso.
L'extrait de code suivant montre comment ajouter ces éléments :
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>
L'extrait précédent indique au framework Android que vous souhaitez qu'il teste chaque processus du package de votre application. Si vous ne souhaitez tester qu'un sous-ensemble des processus de votre application, vous pouvez spécifier une liste séparée par des virgules dans l'élément targetProcesses
:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Comprendre l'architecture de l'outil
Lorsque vous testez votre application et lancez son processus par défaut, vous pouvez effectuer une interaction d'UI, comme appuyer sur un bouton, qui démarre une activité dans un processus secondaire. Le système effectue ensuite les étapes suivantes pour activer les tests multiprocessus à l'aide d'Espresso :
- Le framework Android crée et démarre un nouveau processus pour suivre la structure de navigation de votre application. Chaque processus
Instrumentation
inclut une nouvelle instance deAndroidJUnitRunner
. À ce stade, les deux processus d'instrumentation ne peuvent pas communiquer entre eux. - Chaque instance
AndroidJUnitRunner
enregistre Espresso comme framework de test. - Les deux instances de
AndroidJUnitRunner
effectuent un handshake pour établir une connexion entre elles. En même temps, chaque instanceAndroidJUnitRunner
connecte tous les clients enregistrés, comme Espresso, à leurs homologues respectifs dans d'autres processus afin que ces clients puissent former un canal de communication direct entre eux. - Chaque instance
AndroidJUnitRunner
continue de rechercher les instances d'instrumentation et les clients du framework de test nouvellement ajoutés, et établit des canaux de communication supplémentaires si nécessaire.
La figure 1 illustre le résultat de ce processus :

Ressources supplémentaires
Pour en savoir plus sur ce sujet, consultez les ressources suivantes.
- Vidéo de la session Test-Driven Development on Android with the Android Testing Support Library (Développement piloté par les tests sur Android avec la bibliothèque Android Testing Support) de Google I/O 2017, à partir de 36:41.