Menerapkan Espresso Idling Resource pada Instrumentation Testing: Tutorial Kelas KADE

Hi Kawan-kawan Peserta KADE,

Apa submission tugas ke-4 mu pernah direject karena gagal instrumentation test? Kalau iya, kamu nggak sendirian. Wajib ikuti tutorial ini yah.

Kenapa Kerap Gagal?

Buat kamu-kamu yang belum tahu, kelas Kotlin Android Developer Expert punya sebuah modul yang membahas tentang testing pada aplikasi Android. Di sana juga dijelaskan step-by-step penerapan unit test dan instrumentation test. Pada akhir modul peserta diminta mengirimkan tugas berisi  project yang menerapkan unit test dan instrumentation test.

Salah satu kendala umum bagi peserta pada tugas tersebut adalah instrumentation testing. Rata-rata tidak berhasil. Apa pasal?

Proses asynchronous pada aplikasi, jawabnya. Tepatnya ketika aplikasi masih perlu menjalankan proses pada background thread seperti menunggu hasil response dari API, sementara Espresso tak mau menunggu dan tetap menjalankan pengujian.

Cara Mengatasinya?

Untuk mengatasi kendala tersebut, berikut beberapa solusi yang sering digunakan.

  1. Fungsi Thread.sleep()
    Cara yang paling mudah adalah dengan menerapkan fungsi 
    Thread.sleep() atau delay. Namun cara tersebut kurang fleksibel karena kita menunda pengujian sesuai dengan waktu yang kita tentukan. Cara ini akan menyebabkan pengujian menjadi kaku karena bisa jadi proses asynchronous sudah selesai sebelum waktu delay selesai. Bahkan bisa juga waktu delay selesai namun ternyata koneksi internet sedang lambat sehingga butuh waktu lebih lama.
  2. Espresso Idling Resource
    Cara yang kedua adalah dengan menerapkan Espresso Idling Resource. Idling resource ini akan merepresentasikan operasi asynchronous yang hasilnya mempengaruhi operasi selanjutnya pada UI test. Dengan mendaftarkan Espresso Idling Resource, kita bisa memvalidasi proses asynchronous dengan lebih mudah dan fleksibel saat menguji aplikasi.

 

Nah, dari kedua solusi tersebut, Espresso Idling resource lah yang sangat direkomendasikan. Lalu bagaimana sih cara menerapkannya ke dalam project Android? Mari ikuti langkah-langkah berikut.

  1. Tambahkan library Espresso Idling Resource ke dalam build.gradle :
  2. Buat sebuah object EspressoIdlingResource:


    Object EspressoIdlingResource dan fungsi-fungsinya inilah yang nantinya akan digunakan dalam menandai proses asynchronous yang berjalan pada aplikasi.

    Pada kelas tersebut gunakan CountingIdlingResource yang berfungsi sebagai penghitung dari tugas-tugas yang dikerjakan. Jika counter-nya 0, tandanya aplikasi sedang tidak menjalankan tugas apa pun.

  3. Supaya idling resource ini bekerja,  lakukan increment() setiap aplikasi akan menjalankan proses asynchronous. Misalnya terapkan ini saat aplikasi akan melakukan load data dari API.

    Kode EspressoIdlingResource.increment() di atas akan memberitahukan Espresso bahwa aplikasi sedang sibuk sampai pemberitahuan berikutnya. Pada tahap ini Espresso akan menghentikan sementara pengujian sampai aplikasi kembali dinyatakan idle atau sudah bebas dari tugasnya.

    Ketika proses load data dari internet sudah selesai, beritahukan Espresso bahwa tugas sudah selesai dijalankan dengan menggunakan kode EspressoIdlingResource.decrement().

    Ketika counter dari idling resource ini sudah kembali 0 atau aplikasi sedang idle maka Espresso akan kembali melanjutkan pengujian.

  4. Terakhir daftarkan EspressoIdlingResource kita ini ke dalam pengujian.

    Kita cukup menambahkan idling resource yang sudah kita buat tadi ke dalam IdlingRegistry setiap kita akan melakukan pengujian. Jangan lupa ya, hapus idling resource tersebut sesaat setelah pengujian selesai. Gunanya untuk menghindari memory leak.

Nah, segitu saja tutorial kali ini. Semoga bermanfaat untuk kamu-kamu yang pusing menghadapi instrumentation testing. Dokumentasi resmi tentang idling resource tersedia di tautan https://developer.android.com/training/testing/espresso/idling-resource.

Salam coba lagi!

“Code less, build more”

 

Penulis: Widyarso Joko Purnomo

Editor: Nur Rohman, Mutiara Arumsari

Belajar mengembangkan aplikasi atau game dengan kurikulum yang telah divalidasi langsung oleh industri dengan Dicoding Academy.

Belajar di Dicoding Sekarang →
Share this:

Head of Reviewer, Dicoding

One comment, add yours.

Firdaus

makasih mas.. kalo ada vidio tutorial di youtube nya lebih bagus kayaknya..

Leave a comment