À mesure que votre application se développe, il peut être 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 autres que ceux par défaut, vous pouvez utiliser la fonctionnalité d'Espresso multiprocessus. Cet outil, disponible sur Android 8.0 (niveau d'API 26) ou version ultérieure, vous permet de tester facilement les interactions de l'interface utilisateur de votre application qui franchissent les limites de traitement de votre application, tout en conservant les garanties de synchronisation d'Espresso.
Lorsque vous utilisez Espresso multiprocessus, tenez compte des considérations suivantes concernant la gestion des versions 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:
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 le code suivant au fichier manifeste androidTest
de votre application:
- Un élément
<instrumentation>
qui définit le processus. - Élément
<meta-data>
indiquant que vous souhaitez utiliser Espresso multiprocessus.
L'extrait de code suivant montre comment ajouter ces éléments:
<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 d'éléments séparés par une virgule 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 avec l'interface utilisateur, par exemple un appui sur un bouton, qui lance une activité dans un processus secondaire. Le système effectue ensuite les étapes suivantes pour activer les tests interprocessus à l'aide d'Espresso:
- Le framework Android crée et lance 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 l'un avec l'autre. - 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 directe entre eux. - Chaque instance
AndroidJUnitRunner
continue à rechercher des instances d'instrumentation et des clients du framework de test récemment ajoutés, afin d'établir des canaux de communication supplémentaires si nécessaire.
La figure 1 illustre le résultat de ce processus:
Ressources supplémentaires
Pour plus d'informations à ce sujet, consultez les ressources suivantes.
- Vidéo de la session Test-driven development on Android with the Android Testing Support Library (Développement basé sur les tests sur Android avec la bibliothèque Android Testing Support) de la conférence Google I/O 2017, à partir de 36:41.