Bagaimana membuat sampel data unit testing yang mudah dipahami?

Burhanudin Hakim
Sep 2, 2018 · 2 min read

Kisah minggu ini dimulai dengan kebutuhan membuat sampel data yang digunakan di dalam test. Pada kisah sebelumnya sudah kita bahas bagaimana cara membuat struktur logika unit testing supaya mudah dipahami, dengan mengikuti xunitpatterns yaitu dengan membagi struktur menjadi empat fase, yaitu setup , excercise , verify , dan teardown .

Pada fase setup dimulai dengan fixture setup, yaitu menyiapkan test fixture atau jika menggunakan library rspec disebut test context . Test Context dapat berupa object beserta variabel didalamnya.


Kenapa perlu membuat fixture setup yang mudah dipahami? Karena tes yang sulit dipahami membuat Anda kesulitan memahami perilaku yang diuji, yang biasa disebut Obscure Test.

Apa yang menyebabkan test Anda sulit dipahami?

Bisa disebabkan terlalu banyak informasi maupun terlalu sedikit informasi yang terdapat di dalam test method.

Tes yang mudah dipahami hanya menampilkan informasi yang diperlukan untuk menguji logika saja, tidak kurang, tidak lebih. Hindari menyertakan data yang tidak mempengaruhi hasil pengujian.


Terlalu banyak informasi

  • Eager Test , test melakukan terlalu banyak verifikasi dalam satu fungsi.
  • Irrelevant Information, tes menampilkan informasi yang tidak relevan di dalam test context sehingga mengaburkan apa yang seharusnya mempengaruhi hasil logika yang akan di tes.

Solusinya dengan menampilkan informasi yang akan mempengaruhi pengujian logika saja.

User Spec menggunakan factory_bot.
  • General Fixture yaitu test menggunakan test contexyang besar, sebaiknya gunakan factory method pattern saat membuat test contex. Dalam kasus Rails kami lebih memilih menggunakan factory_bot dibandingkan dengan Rails fixtures.

Kita perlu membuka file spec/fixture/users.yml terlebih dahulu untuk mengetahui state yang digunakan dalam proses verifikasi logika. Seiring aplikasi berkembang biasanya dibutuhkan variasi pada setiap Objek Model. Misalnya jenis pengguna, Anda membutuhkan contoh pengguna dengan role dan title yang bervariasi, dan kesimpulanya fixture akan menjadi semakin besar. Solusinya mengganti menggunakan factory_bot.


Terlalu sedikit informasi

  • Mystery Guest : kesulitan membaca tes karena test context yang digunakan di dalam fase verifikasi berada di luar test method.

Kalau kita lihat spesifik tes menjadi kurang informatif untuk dipahami apa sebenarnya yang diuji.

Hindari penggunaan subject, let, its, dan beforekarena menyebabkan munculnya mystery guests, yang akan membuat kita kesulitan dalam mengubah tes. Kecuali ada alasan yang penting untuk menggunakannya. disarankan menggunakan variable, method, and class.

  • Hard-Coded Test Data, yaitu value di dalam fixture ditulis hard-coded di dalam test method. Menyebabkan mengaburkan logika yang akan dites karena input dan output dua-duanya ditulis hard-coded saling berkaitan.

Fixture setup dan verify memiliki saling keterkaitan. Tes diatas bukan mengetes behaviour tetapi implementasi. Sering juga disebut behaviour smell.

  • Indirect Testing TL;DR; hindari membuat test untuk private method. Kita perlu menguji behaviour bukan implementasi, sedangkan private method merupakan detail implementasi karena untuk berinteraksi dengan private method memerlukan interface dari method lain. Jika Anda merasa logika di dalam private method perlu pengujian lebih detail, menunjukkan bahwa sebaiknya private method tersebut perlu dipecah menjadi Class baru yang bisa dites.

Kesimpulan

Tes yang mudah dipahami hanya menampilkan informasi yang diperlukan untuk menguji logika saja, tidak kurang, tidak lebih. Hindari menyertakan data yang tidak mempengaruhi hasil pengujian.

Happy Coding! Sampai jumpa di kisah selanjutnya!


Burhanudin Hakim

Written by

Developer, Co-Founder and VP-Engineering at https://www.qontak.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade