Seiring dengan berkembangnya aplikasi, Anda mungkin sebaiknya menempatkan beberapa komponen aplikasi dalam proses selain proses utama aplikasi. Untuk menguji komponen aplikasi dalam proses non-default ini, Anda dapat menggunakan fungsionalitas Multiprocess Espresso. Alat yang tersedia di Android 8.0 (API level 26) dan yang lebih tinggi ini memungkinkan Anda menguji interaksi UI aplikasi dengan lancar yang melintasi batas proses aplikasi sambil mempertahankan jaminan sinkronisasi Espresso.
Saat menggunakan Multiprocess Espresso, perhatikan penetapan versi dan cakupan berikut:
- Aplikasi Anda harus menargetkan Android 8.0 (API level 26) atau yang lebih tinggi.
- Alat ini hanya dapat menguji komponen aplikasi yang Anda sertakan dalam proses di dalam paket aplikasi Anda. Fitur tersebut tidak dapat menguji proses eksternal.
Menggunakan alat
Untuk menguji suatu proses dalam aplikasi Anda menggunakan Multiprocess Espresso, tambahkan referensi
ke artefak espresso-remote dalam file build.gradle
aplikasi Anda:
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') }
Anda juga perlu menambahkan elemen berikut ke manifes androidTest
aplikasi:
- Elemen
<instrumentation>
yang menentukan proses. - Elemen
<meta-data>
yang menunjukkan bahwa Anda ingin menggunakan Multiprocess Espresso.
Cuplikan kode berikut menunjukkan cara menambahkan elemen ini:
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>
Cuplikan sebelumnya menunjukkan pada framework Android yang Anda inginkan untuk menguji
setiap proses dalam paket aplikasi Anda. Jika ingin menguji hanya sebagian
proses aplikasi, Anda dapat menentukan daftar yang dipisahkan koma dalam
elemen targetProcesses
sebagai gantinya:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Memahami arsitektur fitur
Saat menguji aplikasi dan meluncurkan proses default-nya, Anda dapat melakukan interaksi UI, seperti penekanan tombol, yang memulai aktivitas dalam proses sekunder. Selanjutnya, sistem akan menyelesaikan langkah-langkah berikut untuk mengaktifkan pengujian lintas proses menggunakan Espresso:
- Framework Android membuat dan memulai proses baru untuk mengikuti
struktur navigasi aplikasi Anda. Setiap proses
Instrumentation
menyertakan instance baruAndroidJUnitRunner
. Pada tahap ini, 2 proses instrumentasi tidak dapat berkomunikasi satu sama lain. - Setiap
instance
AndroidJUnitRunner
mendaftarkan Espresso sebagai framework pengujiannya. - 2 instance
AndroidJUnitRunner
melakukan handshake untuk terhubung antara satu sama lain. Pada saat yang sama, setiap instanceAndroidJUnitRunner
menghubungkan semua klien terdaftar seperti Espresso dengan kliennya masing-masing di proses lain sehingga klien tersebut dapat membentuk saluran komunikasi langsung satu sama lain. - Setiap instance
AndroidJUnitRunner
terus mencari instance instrumentasi yang baru ditambahkan dan menguji klien framework, sehingga membangun saluran komunikasi tambahan sesuai kebutuhan.
Gambar 1 menggambarkan hasil dari proses ini:
![](https://developer.android.com/static/images/training/testing/multiprocess_espresso.png?authuser=3&hl=id)
Referensi lainnya
Untuk informasi selengkapnya tentang topik ini, lihat referensi berikut.
- Pengembangan Berbasis Pengujian di Android dengan video sesi Support Library Pengujian Android dari Google I/O 2017, mulai 36.41.