“Lo ngejek?!?”: Testing: Mock Object, Stub(Test Isolation)

Anisha Inas
PPL cewe semua!
Published in
3 min readApr 29, 2019

Bukan, bukan mock ngejek ngatain…

Beyond TDD: Test Isolation

Pada suatu hari saya ingin mengcek coverage instrumentation test Android. Lalu tiba-tiba: FAILED. Beberapa test di change password ada yang gagal. Apa yang terjadi? Ternyata password yang digunakan untuk melakukan test sudah diganti, jadi jelas saya tidak dapat menggunakan password yang lama. Setiap kali akun di database diganti, begitu juga dengan test saya. Padahal kan yang ingin saya cek behavior Androidnya saja???

Disinilah mengapa Test Isolation sangat penting. Dikutip dari artikel milik Sujit Kumar, suatu tes harus memenuhi 3A yaitu Arrange, Act, dan Assert. Yang menarik adalah Arrange yaitu data yang digunakan pada tes tidak boleh dependen pada environment. Karena kita hanya ingin menguji behavior dari suatu activity, seharusnya apa yang terjadi di belakang tidak perlu menjadi masalah. Misalnya kita ingin memastikan akan muncul peringatan jika pengguna memasukkan password yang salah. Tetapi untuk mengetahui password salah atau tidak kita perlu mengirimkan request ke API. Jadi, apa yang bisa dilakukan?

Mock Object vs. Stub

Fowler menulis artikel yang menarik tentang hal ini. Menurut Fowler, Mock melakukan behavior verification sedangkankan Stub digunakan untuk state verification. Apa maksudnya? Penjelasan berikut ini diambil dari artikel milik Magnus Ekstrand.

Stub

Stub adalah suatu kelas yang mengembalikan (hard coded) data dari method dan funtionnya. Stub biasa digunakan pada unit test untuk menguji class atau method yang memberikan output untuk input yang diketahui. Stub bisa dilakukan dengan mengimplementasi interface yang ingin ditest dan bisa ditambahkan/mengoverride method baru dari yang sudah ada.

Stub Kelas EditProfile pada test

Stubbing bisa juga dilakukan sebagai inner class. Potongan kode diatas adalah contoh stubbing yang dilakukan pada kelas Edit Profile. Activity Edit Profile menampilkan data yang disampaikan oleh activity sebelumnya yang melalui intent. Karena saya hanya menjalankan activity EditProfile saja, maka tidak akan ada intent yang disampaikan dari activity sebelumnya. Agar tidak mendapat null exception, maka saya membuat mengisi intent palsu.

Mock Object

Berbeda dengan stub, mock object diciptakan dengan menggunakan framework. Penggunaan mock lebih fleksibel dari stub karena tidak bergantung pada implementasi yang sudah ada. Berikut ini adalah contoh dari penggunaan mock.

Sebelumnya, untuk melakukan test behavior Android kita perlu mengujinya dengan memberi input data yang asli seperti pada database sehingga dapat mengembalikan response yang diberikan. Dengan cara seperti itu, data input perlu diupdate setiap database diganti. Test juga akan fail jika terdapat gangguan pada server. Dengan ini kita menggunakan mock API dengan kembalian response yang kita atur sendiri sehingga kita tidak perlu lagi bergantung pada environment.

Source

--

--