Wraz z rozwojem aplikacji może się okazać, że warto umieścić niektóre jej komponenty w procesie innym niż główny proces aplikacji. Aby przetestować komponenty aplikacji w tych procesach domyślnych, możesz użyć funkcji Multiprocess Espresso. To narzędzie, dostępne na Androidzie 8.0 (poziom interfejsu API 26) i nowszym, umożliwia płynne testowanie interakcji interfejsu aplikacji, które przekraczają granice procesu aplikacji, przy jednoczesnym zachowaniu gwarancji synchronizacji Espresso.
Podczas korzystania z Multiprocess Espresso pamiętaj o tych kwestiach związanych z wersjami i zakresem:
- Aplikacja musi być kierowana na Androida 8.0 (API na poziomie 26) lub nowszego.
- Narzędzie może testować tylko komponenty aplikacji, które uwzględnisz w procesach w pakiecie aplikacji. Nie może testować procesów zewnętrznych.
Korzystanie z narzędzia
Aby przetestować proces w aplikacji za pomocą Multiprocess Espresso, dodaj odwołanie do artefaktu espresso-remote w pliku build.gradle
aplikacji:
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') }
Musisz też dodać do androidTest
manifestu aplikacji te elementy:
- Element
<instrumentation>
, który definiuje proces. - Element
<meta-data>
wskazujący, że chcesz używać Multiprocess Espresso.
Poniższy fragment kodu pokazuje, jak dodać te elementy:
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>
Poprzedni fragment kodu informuje platformę Androida, że chcesz przetestować każdy proces w pakiecie aplikacji. Jeśli chcesz przetestować tylko podzbiór procesów aplikacji, możesz podać listę rozdzieloną przecinkami w elemencie targetProcesses
:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Poznaj architekturę narzędzia
Podczas testowania aplikacji i uruchamiania jej domyślnego procesu możesz wykonać interakcję z interfejsem, np. nacisnąć przycisk, co spowoduje rozpoczęcie działania w procesie dodatkowym. Aby włączyć testowanie w wielu procesach za pomocą Espresso, system wykonuje te czynności:
- Platforma Android tworzy i uruchamia nowy proces, który będzie zgodny ze strukturą nawigacyjną aplikacji. Każdy proces
Instrumentation
obejmuje nową instancjęAndroidJUnitRunner
. Na tym etapie 2 procesy instrumentacji nie mogą się ze sobą komunikować. - Każda instancja
AndroidJUnitRunner
rejestruje Espresso jako platformę testową. - 2 instancje
AndroidJUnitRunner
przeprowadzają uzgadnianie, aby nawiązać między sobą połączenie. Jednocześnie każda instancjaAndroidJUnitRunner
łączy wszystkich zarejestrowanych klientów, takich jak Espresso, z ich odpowiednikami w innych procesach, aby mogli oni utworzyć bezpośredni kanał komunikacji między sobą. - Każda instancja
AndroidJUnitRunner
nadal wyszukuje nowo dodane instancje instrumentacji i klientów platformy testowej, w razie potrzeby tworząc dodatkowe kanały komunikacji.
Rysunek 1 przedstawia wynik tego procesu:

Dodatkowe materiały
Więcej informacji na ten temat znajdziesz w tych materiałach.
- Film z sesji Test-Driven Development on Android with the Android Testing Support Library (Tworzenie aplikacji na Androida metodą TDD przy użyciu biblioteki Android Testing Support Library) z konferencji Google I/O 2017, od 36:41.