Mengenal Instrumentation Test pada Android Part 1

Implementasi instrumentation test pada Android menggunakan library Espresso dan menerapkan idling resource

Photo by
freestocks.org on Unsplash

Hal yang penting dan kadang terlewatkan atau di skip oleh para developer adalah Testing atau pengujian , Testing atau pengujian pada android adalah suatu rangkaian uji yang berfungsi untuk memastikan code dan flow pada aplikasi berjalan sesuai rencana dan memastikan tidak ada bug pada aplikasi.

Dengan testing atau pengujian kita bisa melihat apakah masih ada bug dalam aplikasi kita, atau apakah aplikasi sudah berjalan sesuai rencana.

“Testing leads to failure, and failure leads to Understanding”

Pengujian mengarah pada kegagalan, dan kegagalan mengarah pada Pemahaman

Di android terdapat 2 jenis testing yaitu Unit Testing dan Instrumentation Test atau Integration Testing.

Singkatnya Unit testing melakukan pengujian pada kode secara individu , unit test berfungsi untuk menguji logika dalam aplikasi, Contoh menguji apakah hasil dari perhitungan 10 + 10 = 20 , jika hasil = 20 maka test berhasil. untuk part tentang Unit Testing akan saya buatkan di artikel tersendiri :D.

sebelumnya kita perlu mengenal dulu apa itu Instrumentation test , Instumentation Test adalah serangkaian testing pada android yang berfungsi untuk menguji UI/tampilan atau menguji behavior pada aplikasi, Contoh kasus cari komponen Recyclerview dengan urutan ke 10 apakah ada ? Memastikan apakah ada sebuah view yang idnya @id+/textView ?, Untuk Instrumentation Test kita membutuhkan Device Android atau Emulator.

Image by google

Oke kali ini kita menggunakan library bawaan android yaitu Espresso , bukan kopi ya broo. Library ini akan memudahkan kita dalam melakukan Instrumentation Test.

TL;DR

yang mau langsung contoh project

Perlu diketahui project yang akan gunakan yaitu seperti dibawah ini :

cukup simpel hanya menampilkan list dari https://jsonplaceholder.typicode.com/photos

oke kita lanjut..

1. Tambahkan di build.gradle(app)

sebenarnya ini sudah otomatis di tambahkan ketika new project sekalipun

2. Dependency Testing Tambahan untuk Recyclerview

karena kita akan melakukan instrumentation test di recyclerview

3. Buat class di folder packagename… (androidTest)

Buat kelas dengan cara biasa, klik kanan new kotlin class namun di folder (androidTest)

folder (androidTest) untuk Instrumentation Test, dan foler (test) unit Unit Testing

disini saya membuat class dengan nama ActivityTest karena kita akan test behaviour ActivityMain

image from screenshot from Kharis Azhar

4. Buat Skenario testnya

dalam testing kalian perlu membuat skenario testnya, skenario ini tergantung dari kebutuhan aplikasi kalian.

contoh simpel kalian bisa membuat yang lebih powerfull

kita akan buat skenario sederhana seperti ini

  • Pertama cari text PhotoMVVM.
  • Kemudian cari view yang idnya = rv_list dan check apakah tampil di layar(display) ini untuk memastikan apakah ada RecyclerView yang idnya rv_list.
  • Scroll posisi RecyclerView hingga ke posisi 8.
  • Setelah sampai di posisi 8 , kemudian dia akan klik posisi tersebut.

sederhana mari kita implementasi di coding

5. Buat anotasi di class ActivityTest

@RuleWith ini akan menentukan, menginisialisasi kelas mana yang akan menjalankan test

ada 6 jenis annotasi pada class test @Test, @Before, @BeforeClass, @After, @AfterClass, @Rule

6. Buat Rule

ini akan menginisialisasi activity mana yang akan di uji

dengan anotasi @Rule dan @JvmField ini akan memberi tau bahwa MainActivity sebagai activity rule testing yang digunakan.

7. Membuat Fungsi Testing

buat function dengan nama testRecyclerView, dengan annotasi @Test untuk menunjukan fun testRecyclerView() adalah suatu testing function

kode di atas mengimplementasikan skenario di point 4,

pertama cari text PhotoMVVM, kemudian cari view yang idnya rv_list apakah tampil di layar, scroll posisi recyclerView ke posisi ke 88, kemudian klik item recyclerview posisi tersebut atau posisi ke 8

*lihat komentar di code

Langkah cara kerja dalam espresso :

pada testing di atas kita menggunakan fitur yang ada pada Espresso yaitu :

1. View Matchers :

  • ViewMatcher yang digunakan untuk menemukan komponen view , contoh di withId(R.id.rv_list) ini akan mencari komponen view yang idnya = R.id.rv_list dan isDisplayed() yang akan mengecek apakah ada di tampilan layar.

2. View Assertions :

  • ViewAssertions digunakan memastikan sebuah state pada view atau mengecek state , contoh matches(…) ini akan mengecek rv_list dan isDisplayed() apakah keduanya cocok(kondisi terpenuhi semua).

3. View Actions :

  • ViewActions digunakan untuk memberikan sebuah action pada view, contoh .perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(8, click())), ini akan memberi action klik di posisi 8

8. Sehingga keseluruhan code test seperti ini

9. Jalankan testnya dengan klik kanan run ‘testRecyclerView()’

image by me

10. Jalankan Test

bisa di lihat Test Fail :D kenapa ? Lihat Lognya ini dikarenakan pada saat menjalankan onView(withId(R.id.rv_list)) data list belum sempat tampil di layar, Saat yang bersamaan Espresso berusaha mencari rv_list sedangkan listnya belum tampil karena ada proses background pengambilan data dari API yang belum selesai, alahasil data belum sempat tampil namun Espresso sudah menjalankan test pencarian id rv_list dan tidak menemukan rv_list.

11. Menambah Thread Sleep

ini sebenarnya bukan best pratice karena ada cara lain yaitu mengunakan Espresso idling resources akan saya bahas di Part 2.

oke sementara untuk memahami Testing menggunakan espresso, kita handle error di atas dengan menambahkan thread.sleep , Ini akan menahan Thread selama beberapa detik untuk menunggu proses pemanggilan data dari API selesai.

Buat Function baru dibawah testRecyclerView()

function delay akan membuat Thread.sleep dengan satuan detik.

Dan panggil delay di function testRecyclerView()

persis di dalam function testRecyclerView dan di atas
onView(withText(“PhotoMVVM”))

delay(5) berarti delay 5 detik(tahan Thread 5 detik).

Code Lengkap setelah ditambahkan Thread.sleep

12. Jalankan Lagi

dengan klik kanan run test testRecyclerView

Congrats all test Passed, instrumentation Test berhasil dijalankan :D.

oke selamat kamu telah mencoba implementasi Instrumentation test, saatnya explore sendiri, testing ini sangat berguna untuk menguji kualitas Behaviour UI aplikasi. tentunya dengan test yang automatisasi seperti ini akan sangat efektif dalam proses development aplikasi.

Part 2 akan saya bahas mengenai Instrumenation test menggunakan Idling Resource Espresso, so stay tuned…

Reference :

--

--