Setelah kemarin kita membahas tentang unit testing, sekarang kita membahas jenis testing lainnya di android yaitu Instrumentation Testing. Instrumentation Testing atau biasa disebut dengan UI Testing bertujuan untuk menguji Aplikasi melalui instruksi-instruksi yang telah dibuat sebelumnya ke UI aplikasi kita, karena itu Instrumentation Testing membutuhkan emulator / real device untuk menjalankannya.
masih belum paham ? kita coba praktekkan sekarang.
pada contoh kali ini kita buat Aplikasi penghitung volume balok. code untuk UI nya adalah adalah sebagai berikut :
maka akan menjadi seperti ini tampilannya, ada 2 komponen yang di hidden yaitu textview yang menampilkan hasil dan textview warning
lalu untuk MainActivity nya adalah sebagai berikut :
pada koding di atas, saat user meng klik tombol hitung maka yang pertama dilakukan adalah melakukan pengecekan isi dari edit text panjang, lebar, dan tinggi. jika semua terisi maka hasil perhitungan akan ditampilkan, dan jika ada yang tidak terisi maka text warning yang akan ditampilkan.
sekarang kita coba membuat instrumentation testing nya. arahkan kursor ke nama class, lalu klik Alt + Enter pada keyboard, lalu pilih Create test
lalu ada dialog yang muncul. klik OK
pada pilihan directory test, pilih androidTest lalu klik OK
maka akan tergenerate sebuah class baru pada directory androidTest pada project anda
sebelum kita melakukan testing, kita matikan terlebih dahulu animasi pada device kita agar proses testing berjalan lancar. caranya pergi ke pengaturan pengembang / Developer Option, cari pengaturan animasi lalu set ke off.
pastikan juga library untuk Instrumentation Testing telah terpasang, disini kita menggunakan Espresso untuk Instrumentation Testingnya
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
sekarang kita koding class MainActivityTest
pada kode di atas terdapat 2 annotation yaitu @Before dan @Test yang mana fungsinya sama dengan yang ada di unit testing yaitu untuk @Before adalah untuk menjalankan suatu perintah sebelum melakukan test dan @Test adalah kode yang berisi testingnya.
pada @Before kita tentukan terlebih dahulu Activity mana yang akan kita test. disini kita test MainActivity
pada Instrumentation Testing kita menggunakan ID dari komponen sebagai pengenal dari perintah yang akan dijalankan oleh Espresso. terdapat 2 aksi dasar dari Instrumentation Testing, yaitu check (untuk memeriksa) dan perform (untuk menjalankan aksi). pada contoh di atas kita menggunakan check untuk mengetahui apakah komponen tersebut tampil (isDisplayed) dan juga apakah isi text komponent tersebut sama (withText). lalu untuk perform kita melakukan aksi klik (click) dan aksi mengetik text (typeText). disitu ada juga closeSoftKeyboard() yang berfungsi untuk menutup keyboard bawaan device.
kita coba untuk run, pastikan emulator / real device telah siap untuk menjalankan aplikasi.
klik icon di sebelah kiri nama class, lalu klik Run
Maka Espresso akan menjalankan perintah yang telah kita ketikkan sebelumnya. kita lihat pada emulator/real device kita berjalan sendiri sesuai instruksi yang telah kita berikan sebelumnya.
hasilnya akan muncul di bagian bawah IDE Android studio.
kita juga bisa melakukan testing beda Activity dengan hanya satu class Test. kita coba membuat satu activity lagi, kita namai SecondActivity, untuk UI nya kita hanya memberi satu TextView saja
sekarang tambahkan satu button lagi di MainActivity, beri action Intent ke SecondActivity
… private fun keSecondActivity() { val intent = Intent(this, SecondActivity::class.java) startActivity(intent) } …pada class MainActivityTest kita tambahkan kode sebagai berikut
kita coba running, bagaimana hasilnya ?
tetap berhasil meski beda activity.
cukup mudah bukan ? kita dapat dengan mudah melakukan Instrumentation Testing jika pada UI kita tidak terdapat proses asynchronous / proses yang memerlukan waktu cukup lama seperti load data dari internet, jika seperti itu kita memerlukan EspressoIdlingResource untuk memberitahukan ke espresso agar meng pause sejenak proses testing, untuk mempelajari lebih lanjut tentang EspressoIdlingResource bisa klik disini
anda bisa mempelajari lebih lanjut tentang Instrumentation Testing disini
Terima kasih telah mampir di Blog ini, semoga ilmu yang saya sampaikan dapat bermanfaat.