W miarę rozwoju aplikacji warto umieścić na stronie niektóre jej komponenty w procesie innym niż główny proces aplikacji. Aby przetestować komponenty aplikacji w tych procesów innych niż domyślne, możesz skorzystać z funkcji Multiprocess Espresso. To narzędzie, dostępne na Androidzie 8.0 (poziom interfejsu API 26) i nowszym, umożliwia płynne testowanie interakcji z interfejsem aplikacji w całym procesie przy zachowaniu gwarancji synchronizacji Espresso.
Jeśli używasz Multiprocess Espresso, zachowaj tę wersję i zakres które warto wziąć pod uwagę:
- Aplikacja musi być kierowana na Androida 8.0 (poziom interfejsu API 26) lub nowszego.
- Narzędzie może testować tylko komponenty aplikacji uwzględnione w procesach w ramach od pakietu 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
Odlotowe
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
Musisz też dodać te elementy do pliku manifestu aplikacji androidTest
:
- Element
<instrumentation>
definiujący proces. - Element
<meta-data>
wskazujący, że chcesz użyć wieloprocesowego espresso.
Fragment kodu, który pokazuje, jak dodać takie 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 wskazuje platformę Androida, która ma zostać przetestowana
każdego procesu w pakiecie aplikacji. Jeśli chcesz przetestować tylko część
procesów aplikacji, możesz podać listę rozdzielonych przecinkami
Zamiast tego targetProcesses
element:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Poznaj architekturę narzędzia
Gdy testujesz aplikację i uruchamiasz jej domyślny proces, możesz użyć interfejsu np. naciśnięcie przycisku, które rozpoczyna działanie w dodatkowej proces tworzenia konta. System wykonuje poniższe czynności, by włączyć przetwarzanie międzysieciowe testowanie z użyciem Espresso:
- Android Framework tworzy i uruchamia nowy proces zgodnie z
do struktury nawigacyjnej. Każdy proces
Instrumentation
zawiera nową instancjęAndroidJUnitRunner
Na tym etapie 2 procesy narzędzi nie mogą komunikować się z każdym inne. - Każdy
AndroidJUnitRunner
rejestruje Espresso jako platformę testowania. - 2 instancje
AndroidJUnitRunner
uzgadniają połączenie, aby nawiązać połączenie. Tak samo raz, każdyAndroidJUnitRunner
łączy wszystkie zarejestrowane klienty, takie jak Espresso, z odpowiednimi jak w innych procesach, dzięki czemu klienci mogą bezpośrednio między sobą kanałem komunikacji. - Co
AndroidJUnitRunner
instancja nadal szuka nowo dodanych instancji instrumentacji i testuje klientów, tworząc w razie potrzeby dodatkowe kanały komunikacji.
Rysunek 1 ilustruje efekt tego procesu:
![](https://developer.android.com/static/images/training/testing/multiprocess_espresso.png?authuser=19&hl=pl)
Dodatkowe materiały
Więcej informacji na ten temat znajdziesz w tych materiałach.
- Tworzenie oparte na testach aplikacji na Androida z pomocą testowania wersji na Androida Biblioteka wideo z sesji Google I/O 2017, zaczynając od 36:41.