Multiprocess Espresso

Seiring pertumbuhan aplikasi, akan lebih mudah jika Anda menempatkan beberapa komponen aplikasi dalam proses yang berbeda dari proses utama aplikasi Anda. Untuk menguji komponen aplikasi dalam proses non-default ini, Anda dapat menggunakan fungsionalitas Multiprocess Espresso. Fitur yang tersedia di Android 8.0 (API level 26) dan yang lebih tinggi ini memungkinkan Anda untuk menguji dengan lancar interaksi UI aplikasi yang melintasi batas-batas proses aplikasi dengan tetap menjaga jaminan sinkronisasi Espresso.

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

  • Aplikasi Anda harus menargetkan Android 8.0 (API level 26) atau yang lebih tinggi.
  • Fitur ini hanya dapat menguji komponen aplikasi yang Anda sertakan dalam proses di dalam paket aplikasi Anda. Fitur tersebut tidak dapat menguji proses eksternal.

Menggunakan fitur

Untuk menguji suatu proses dalam aplikasi Anda menggunakan Multiprocess Espresso, tambahkan referensi ke artefak espresso-remote dalam file build.gradle aplikasi Anda:

aplikasi/build.gradle

dependencies {
        ...
        androidTestImplementation 'androidx.test.espresso:espresso-remote:3.1.0'
    }
    

Anda juga perlu menambahkan elemen berikut ini ke manifes androidTest aplikasi Anda:

  • Elemen <instrumentation> yang mendefinisikan 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 Anda inginkan untuk menguji setiap proses dalam paket aplikasi Anda. Jika Anda 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 defaultnya, Anda dapat melakukan interaksi UI (misalnya menekan tombol) yang memulai aktivitas dalam proses sekunder. Sistem kemudian menyelesaikan langkah-langkah berikut untuk mengaktifkan pengujian lintas proses menggunakan Espresso:

  1. Framework Android menciptakan dan memulai proses baru untuk mengikuti struktur navigasi aplikasi Anda. Setiap proses Instrumentation menyertakan instance AndroidJUnitRunner baru. Pada tahap ini, 2 proses instrumentasi tidak dapat berkomunikasi satu sama lain.
  2. Setiap instance AndroidJUnitRunner mendaftarkan Espresso sebagai framework pengujiannya.
  3. 2 instance AndroidJUnitRunner melakukan handshake untuk terhubung antara satu sama lain. Pada saat yang sama, setiap instance AndroidJUnitRunner menghubungkan semua klien terdaftar seperti Espresso dengan kliennya masing-masing di dalam proses lain sehingga klien tersebut dapat membentuk saluran komunikasi langsung satu sama lain.
  4. Setiap instance AndroidJUnitRunner akan terus mencari instance instrumen yang baru ditambahkan dan menguji framework klien sehingga membangun saluran komunikasi tambahan sesuai kebutuhan.

Gambar 1 menggambarkan hasil dari proses ini:

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

Referensi lainnya

Untuk informasi selengkapnya tentang topik ini, lihat referensi berikut.