Ketika pengujian unit, saya sering mendebatkan berapa banyak data yang saya berikan, dan mengharapkan kembali dari unit saya yang diuji, saya harus memasukkan dalam file pengujian yang sebenarnya.
Pengorbanan yang selalu saya perjuangkan adalah:
- Jika sebagian besar dari tes (dalam volume kode) terdiri dari data input dan output, tampaknya sulit untuk benar-benar membaca tes, tetapi saya dapat dengan mudah melihat in-dan output yang sebenarnya.
- Jika saya memuat data uji dari file, saya dapat dengan mudah menguji banyak variasi pada input data yang mungkin, dengan mudah menggunakan kembali data uji untuk beberapa tes, tetapi saya harus meninggalkan kode sumber untuk melihat file lain untuk melihat apa sebenarnya inputnya. .
Apakah salah satu dari ini anti-pola?
unit-testing
anti-patterns
unit-test-data
DudeOnRock
sumber
sumber
Jawaban:
Untuk menjawab pertanyaan Anda secara langsung - tidak, saya tidak percaya keduanya adalah anti-pola ketika digunakan dengan benar.
--- Lebih banyak jawaban verbal ---
Dari pengalaman saya, saya pikir ini sangat tergantung pada tujuan tes Anda. Inilah aturan praktis yang pernah saya gunakan di masa lalu dan itu membantu saya memutuskan:
Apakah Anda benar-benar menguji unit kode kecil? (A unit test sejati)
Jika ya, maka saya telah menemukan bahwa jauh lebih mudah untuk membuat data di dalam tes itu sendiri karena saya dapat melihat apa yang disahkan. Dalam kasus ini, saya biasanya akan mencari perpustakaan seperti Jasmine untuk digunakan karena saya menemukan bahwa itu membuat membuat dan memelihara data uji lebih mudah. Itu adalah preferensi pribadi - gunakan apa pun yang membuat pekerjaan Anda lebih mudah.
Jika tidak, maka Anda mungkin benar-benar menguji sistem itu sendiri. Dalam kasus ini, saya sering memuat data dari sumber eksternal, alasannya di sini adalah:
Jawabannya begitu lama, tergantung pada apa yang Anda uji dan mengapa. Kedua pendekatan itu bermanfaat dan ada tempatnya - pilihlah yang terbaik untuk situasi Anda.
sumber
Saya tidak melihat pertukaran di sini. Kode sumber seharusnya menggambarkan algoritma, atau setidaknya logika bisnis, bukan data dalam jumlah besar. Jika Anda menulis transformasi Fourier, Anda ingin memverifikasi bahwa nada sinus dipetakan dengan benar ke satu puncak, suara campuran ke lebih banyak puncak dll, tetapi untuk itu benar-benar cukup untuk memberi makan file bernama
sinus.wav
ke dalam rutinitas dan memverifikasi bahwa struktur output adalah apa yang Anda harapkan.Tentu, secara teknis Anda tidak memiliki jaminan langsung yang
sinus.wav
benar - benar mengandung nada sinus, tetapi seperti yang Anda katakan, daftar 100.000 nilai amplitudo di sumber tidak benar-benar memberi Anda hal yang baik - pada kenyataannya, itu lebih buruk , karena Anda setidaknya dapat memutar file eksternal dengan pemutar audio untuk diperiksa, sementara nilai data yang terkubur dalam kode sumber pada dasarnya tidak mungkin dilakukan dengan apa pun.sumber