Mock dan Stub

Virdian Harun Prayoga
3 min readApr 13, 2023

--

Apa itu Mock?

Mock merupakan salah satu bentuk dari test double, suatu objek yang digunakan sebagai implementasi sederhana objek sebenarnya dalam ruang lingkup testing. Tipe test double ini dapat digunakan untuk memberikan respon terkontrol dari dependensi suatu komponen. Objek mock juga memiliki suatu ekspektasi yang menjelaskan ekspektasi suatu komponen terhadap dependensinya.

Apa itu Stub?

Stub juga merupakan salah satu bentuk dari test double yang digunakan untuk memberikan respon terkontrol dari dependensi suatu komponen. Tipe test double ini dapat digunakan untuk memberikan respon terkontrol tanpa melakukan logika sebenarnya. Stub biasanya tidak memberikan respon apapun diluar hal yang diprogram dalam test.

Apa perbedaan dari Mock dengan Stub?

Dilihat dari definisi mock dan stub, nampaknya mock dengan stub merupakan suatu hal yang sama. Hal ini dikarenakan mock dapat dikatakan sebagai suatu ekstensi dari stub. Suatu stub hanya merupakan suatu implementasi simpel yang digunakan untuk memberikan respon yang terkontrol. Sementara itu, mock tidak hanya berfungsi sebagai stub, tetapi juga melakukan verifikasi perilaku dari suatu komponen dan interaksinya terhadap objek yang dibuatkan mocknya.

Kenapa Mock atau Stub Diperlukan?

Dalam software testing, mock atau stub diperlukan karena beberapa hal, yaitu:

  1. Isolasi komponen. Dalam suatu aplikasi, seringkali suatu komponen memiliki dependensi pada komponen-komponen lain. Ketika suatu komponen sedang diuji, diperlukan suatu pengisolasian komponen dependensi. Hal ini dilakukan agar masalah yang ditemukan saat pengujian dapat disimpulkan berasal dari komponen yang diuji, bukan dari dependensinya. Dengan menggunakan mock ataupun stub, kita dapat mensimulasikan perilaku dari dependensi dan fokus pada komponen yang diuji
  2. Mempercepat testing. Beberapa dependensi, seperti database atau web service, seringkali memiliki beberapa gangguan yang menyebabkannya menjadi lambat atau bahkan tidak responsif. Kita dapat mengatasi hal ini dengan mensimulasikan dependensi tersebut menggunakan mock ataupun stub.
  3. Mengontrol kondisi testing. Seringkali kita harus mengetes komponen dalam berbagai macam kondisi. Kondisi-kondisi tersebut mungkin berasal dari perilaku dependensi. Dengan menggunakan mock atau stub, kita dapat mengatur perilaku dari dependensi sehingga kita dapat mengetes komponen dalam semua kondisi dengan lebih mudah.

Contoh Implementasi

Dalam Python, baik mock maupun stub dapat diimplementasikan menggunakan library ‘unittest.mock’. Adapun contohnya adalah sebagai berikut:

Misalkan kita memiliki sebuah repository yang menyimpan semua log dan ada fungsi yang berfungsi menyimpan suatu log kepada repository tersebut.

Untuk memverifikasi bahwa fungsi tersebut benar menyimpan log pada repository, kita dapat menggunakan mock dengan cara sebagai berikut:

Pada potongan kode tersebut, mock digunakan untuk mensimulasikan objek repository dalam class LogService menggunakan decorator patch.object yang kemudian digunakan sebagai argumen repo_mock dalam unittest. Selain itu, stub juga digunakan untuk mensimulasikan objek log yang akan disimpan menggunakan fungsi dari class ServiceLog. Terakhir setelah melakukan pemanggilan fungsi saveLog, kita melakukan test apakah lognya benar disimpan ke repository menggunakan ‘assert_called_once_with(log)’.

Sekian artikel saya. Semoga artikel ini bermanfaat bagi semua pembaca.

--

--