Mock Testing and Stub (Python)

Refo Ilmiya
AdHub Team
Published in
2 min readMay 26, 2019

Seringkali, software yang kita buat berinteraksi dengan services yang kita sebut “kotor”. Seperti yang dikatakan layman:

“Services that are crucial to our application, but whose interactions have intended but undesired side-effects”

yang artinya, context yang tidak diinginkan dari suatu test run.

Sebagai contoh, misalkan kita inign membuat suatu social app dan ingin mengetes fitur baru ‘Post to facebook’, namun kita tidak ingin untuk melakukan posting ke facebook setiap kali kita menjalankan test suite kita. Kasus ini dapat di-handle dengan menggunakan mock.

Library Pythonunittest memiliki suatu sub-package yang bernama unittest.mock—atau kalau kita sebut sebagai dependensi, yaitu mock—yang memberikan kegunaan yang sangat banyak untuk melakukan mock dan stub efek samping atau kelemahan tersebut.

Implementasi di Adhub

Saat ini, mock testing yang sudah masuk staging baru testing pada google api. Namun yang Saya implementasikan disini adalah mocking pada pembuatan iklan di google.

Kasusnya sebagai berikut, Saya ingin melakukan testing apakah fungsi create iklan benar terpanggil. Namun, saya tidak ingin setiap pemanggilan fungsi di unittest iklan baru terbuat di google. Oleh karena itu, Saya mengimplementasikan mock testing disini.

Terlihat pada mock tersebut, ketika kita ingin memanggil fungsi pasang iklan yang dipanggil adalah fungsi pasang_iklan_call.

Adapun fungsi mock yang dipanggil ada pada file berikut:

Stub

Stub secara bahasa artinya adalah rintisan. Stub sendiri adalah suatu implementasi dimana kita menuliskan code kosong yang biasanya isinya adalah pass. Stub berfungsi sebagai reminder bahwa kita perlu mengimplementasi sesuatu. Terutama dalam development menggunakan TDD kita perlu mengimplementasi Test sebelum implementasi aslinya yang berarti stub sangat berfungsi bagi kita karena ktia cukup perlu melakukan stubbing pada method dan class yang ingin kita rancang atau akan kita implementasi ke depannya tapi kita ingin buat test nya terlebih dahulu.

Implementasi pada Adhub

Sebelumnya saya telah mengimplementasi stubbing ketika tag masih [RED] berikut adalah contoh nya: https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/1908612c7bd921541428d294d0d7517507caa377/detail/views.py

Terlihat pada code di atas saya melakukan stub pada method detail index yang kemudian Saya implementasikan pada tag [Green] berikut: https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/7f7893a366dd43f98fbc070caacbbf6f44ae0f98/detail/views.py

Dari kedua link di atas Terlihat apabila test sudah diimplementasikan, kita dapat mengimplementasi code supaya lolos tes dan karena sebelumnya telah dilakukan stubbing kita dapat lebih mudah melihat fungsi mana yang dirujuk oleh unittest dan kemudian mengimplementasi fungsi-fungsi tersebut.

--

--