Multiprocess Espresso

Seiring perkembangan aplikasi, mungkin akan berguna jika Anda menempatkan beberapa komponen aplikasi dalam proses selain proses utama aplikasi Anda. Untuk menguji komponen aplikasi dalam proses non-default, Anda dapat menggunakan fungsi Multiprocess Espresso. Alat ini, yang tersedia di Android 8.0 (level API 26) dan yang lebih tinggi, memungkinkan Anda untuk dengan lancar menguji interaksi UI aplikasi Anda yang melintasi proses aplikasi batas sambil mempertahankan jaminan sinkronisasi Espresso.

Saat menggunakan Multiprocess Espresso, pertahankan pembuatan versi dan cakupan berikut pertimbangan:

  • 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 dalamnya paket aplikasi Anda. Fitur tersebut tidak dapat menguji proses eksternal.

Menggunakan fitur

Untuk menguji proses dalam aplikasi Anda menggunakan Multiprocess Espresso, tambahkan referensi ke artefak espresso-remote di 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 framework Android yang ingin Anda uji. setiap proses dalam paket aplikasi Anda. Jika Anda hanya ingin menguji subset dari proses aplikasi, Anda dapat menentukan daftar yang dipisahkan koma dalam Sebagai gantinya, elemen targetProcesses:

<instrumentation
    ...
    android:targetProcesses=
            "androidx.test.mytestapp:myFirstAppProcessToTest,
             androidx.test.mytestapp:mySecondAppProcessToTest" ... />

Memahami arsitektur fitur

Saat menguji aplikasi dan meluncurkan proses defaultnya, Anda mungkin menjalankan UI interaksi Anda, seperti penekanan tombol, yang memulai aktivitas di interaksi sekunder, {i>checkout<i}. Sistem kemudian menyelesaikan langkah-langkah berikut untuk mengaktifkan lintas proses pengujian menggunakan Espresso:

  1. Framework Android membuat dan memulai proses baru untuk mengikuti metode struktur navigasi. Setiap proses Instrumentation menyertakan instance baru dari AndroidJUnitRunner. Pada tahap ini, 2 proses instrumentasi tidak dapat berkomunikasi dengan masing-masing proses lainnya.
  2. Masing-masing AndroidJUnitRunner mendaftarkan Espresso sebagai framework pengujiannya.
  3. 2 kasus AndroidJUnitRunner melakukan jabat tangan untuk menyambung koneksi antara satu sama lain. Secara bersamaan masing-masing AndroidJUnitRunner menghubungkan semua klien terdaftar seperti Espresso dengan rekan dalam proses lain sehingga klien tersebut dapat membentuk saluran komunikasi di antara mereka sendiri.
  4. Setiap AndroidJUnitRunner instance akan terus mencari instance instrumentasi dan pengujian yang baru ditambahkan kerangka kerja klien, membangun saluran komunikasi tambahan sesuai kebutuhan.

Gambar 1 menggambarkan hasil dari proses ini:

Gambar 1. Membangun komunikasi antara banyak proses instrumentasi menggunakan Multiprocess Espresso

Referensi lainnya

Untuk informasi selengkapnya tentang topik ini, lihat referensi berikut.