Kenapa perlu Test Double ?
Pendahuluan
Setiap kita membuat code program, maka Best Practice yang disarankan adalah membuat Unit Test nya juga.
Dengan Unit test,maka kita bisa memastikan bahwa :
- code kita benar secara fungsi
- meningkatkan kepercayaan terhadap code yang kita buat
- memastikan bahwa perubahan yang kita lakukan dengan refactoring nantinya tidak menyenggol code yang lama..
Baca tentang unit testing di sini , Unit Test vs Integration Test
Lalu apa kendalanya ?
Akan tetapi, membuat Unit Test mempunyai beberapa kendala, yaitu dalam hal :
- Mempersiapkan komponen-komponen apa saja yang akan dites.
- Mempersiapkan data apa saja yang akan dites.
Hmm, kelihatannya mudah sih ya ???
Iya mudah, kalau :
-
Komponennya mempunyai ketergantungan yang mudah. Coba kalau pakai komponen dengan ketergantungan yang tinggi dengan sistem lain dan butuh sumberdaya banyak. Misalnya koneksi ke database, koneksi protokol yang mempunyai ketergantungan dengan protokol lain,membuat file, dll. Maka kita harus memikirkan bagaimana menginisiasi koneksinya, kemudian me-release nya kalau sudah tidak digunakan.
-
Data yang dites selalu tersedia. Misalkan kita mengetes data dari database, maka kita berharap bahwa datanya akan selalu ada, agar unit test kita berjalan. Tetapi kalau datanya tidak sengaja terhapus, ataupun tidak tersedia, maka Unit Test kita juga akan gagal.
Kalau membuat Unit Test dengan ketergantungan yang mudah dan data yang selalu tersedia, maka sepertinya kita cukup menggunakan fungsi dari code program kita secara langsung.
Misalnya kita ingin mengetes code program kita yang berisikan perhitungan untuk formula kalkulasi tertentu.
Di code tersebut tentu saja tidak ada koneksi ke database, atau memanggil API lain, dsb, sehingga pantas kita sebut sebagai unit code program yang tidak memiliki ketergantungan yang sulit.
Oleh karenanya mengetes unit code kita tersebut cukup dengan memanggil langsung fungsinya, dan duaar..!!!, fungsi dan code kita bisa ditest dengan baik.
Tetapi kalau sudah menyangkut ketergantungan terhadap koneksi database ???
Alamaak, kita harus membuat objek-objek terkait database dari library code program kita.
Dan itu susah bro…, eh tergantung ding, kalau yang rajin biasanya mudah saja sih..
Namun bagi kita rakyat kebanyakan, maka cara demikian tidaklah mudah.!!
Lalu apa solusinya ?
Solusinya salah satunya dengan memakai Test Double
Test Double berupaya untuk menyelesaikan 2 kasus diatas, yaitu :
-
Ketergantungan terhadap komponen diatasi dengan melakukan abstraksi dependencies. Artinya ketergantungan terhadap koneksi database, protokol, sumberdaya yang dibutuhkan, dibuat sedemikian rupa sehingga bisa digantikan dengan koneksi, protokol, sumberdaya yang kita definisikan sendiri. Bisa bentuknya Dummy, Fake, Mock, Spydll.
-
Ketergantungan terhadap data bisa diatasi dengan melakukan Stub terhadap fungsi/behavior dari object yang mengembalikan data.