Wenn Ihre App wächst, kann es nützlich sein, einige App-Komponenten in einem anderen Prozess als dem Hauptprozess Ihrer App. Zum Testen von App-Komponenten in diesen nicht standardmäßige Prozesse verwenden, können Sie die Funktion von Multiprocess Espresso nutzen. Mit diesem Tool, das ab Android 8.0 (API-Level 26) verfügbar ist, kannst du nahtlos die Interaktionen mit der Benutzeroberfläche Ihrer App testen, die den Prozess der App durchlaufen unter Einhaltung der Synchronisierungsgarantien von Espresso.
Behalten Sie bei Verwendung von Multiprocess Espresso die folgende Versionierung und den folgenden Bereich bei. Überlegungen:
- Deine App muss auf Android 8.0 (API-Level 26) oder höher ausgerichtet sein.
- Das Tool kann nur App-Komponenten testen, die Sie in Prozesse innerhalb Ihres App-Pakets. Sie können damit keine externen Prozesse testen.
Tool verwenden
Fügen Sie eine Referenz hinzu, um einen Prozess in Ihrer App mit Multiprocess Espresso zu testen
dem Artefakt espresso-remote in der Datei build.gradle
Ihrer App:
Cool
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
Außerdem musst du dem androidTest
-Manifest deiner App Folgendes hinzufügen:
- Ein
<instrumentation>
-Element, das den Prozess definiert. - Ein
<meta-data>
-Element, das angibt, dass Sie Multiprocess Espresso verwenden möchten.
Im folgenden Code-Snippet sehen Sie, wie diese Elemente hinzugefügt werden:
<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>
Mit dem vorherigen Snippet wird das Android-Framework angegeben, das getestet werden soll.
im Paket Ihrer App an. Wenn Sie nur eine Teilmenge Ihrer Daten testen möchten,
App-Prozessen verwenden, können Sie eine durch Kommas getrennte Liste im
Stattdessen targetProcesses
-Element:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Die Architektur des Tools verstehen
Wenn Sie Ihre Anwendung testen und den Standardprozess starten, führen Sie möglicherweise eine UI aus Interaktion, z. B. das Drücken einer Schaltfläche, die eine Aktivität in einem sekundären . Das System führt dann die folgenden Schritte aus, um prozessübergreifende Tests mit Espresso:
- Das Android-Framework erstellt und startet einen neuen Prozess, um die
Navigationsstruktur. Jeder
Instrumentation
-Prozess enthält eine neue Instanz vonAndroidJUnitRunner
In dieser Phase können die beiden Instrumentierungsprozesse nicht miteinander kommunizieren. Sonstiges. - Jedes
AndroidJUnitRunner
-Instanz registriert Espresso als ihr Test-Framework. - Die beiden Instanzen von
AndroidJUnitRunner
und führen einen Handshake aus, um eine Verbindung miteinander herzustellen. Gleichzeitig Mal, jeweilsAndroidJUnitRunner
verbindet alle registrierten Clients wie Espresso mit ihrem jeweiligen Kollegen in anderen Prozessen, sodass diese Kundschaft Kommunikationskanal untereinander. - Jedes
AndroidJUnitRunner
sucht weiter nach neu hinzugefügten Instrumentierungsinstanzen und Tests Framework-Kunden und bei Bedarf zusätzliche Kommunikationskanäle einrichten.
Abbildung 1 veranschaulicht das Ergebnis dieses Vorgangs:
<ph type="x-smartling-placeholder">Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen.
- Testgesteuerte Entwicklung unter Android mit dem Android Testing Support Mediathek von der Google I/O 2017, das um 36:41 Uhr beginnt.