Untuk memuat atau tidak memuat data untuk pengujian unit dari file eksternal

17

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?

DudeOnRock
sumber
Jenis data apa?
Jon Reid
@JonReid: Sebagian besar teks.
DudeOnRock

Jawaban:

11

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:

  1. Tes ini bukan tentang kejelasan kode untuk programmer (meskipun itu masih penting - seseorang harus mempertahankan ini), ini tentang menjalankan cukup berbagai jenis data melalui seluruh bongkahan sistem untuk memastikan itu berfungsi.
  2. Seringkali saya akan menulis kode pipa untuk memuat dan menggunakan data uji, tetapi data itu sendiri dibuat oleh orang lain (biasanya anggota staf QA dalam kasus saya). Orang-orang ini biasanya bukan programmer, jadi saya tidak bisa berharap mereka menjadi kode pengeditan.

Jawabannya begitu lama, tergantung pada apa yang Anda uji dan mengapa. Kedua pendekatan itu bermanfaat dan ada tempatnya - pilihlah yang terbaik untuk situasi Anda.

nadrees
sumber
9

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.wavke dalam rutinitas dan memverifikasi bahwa struktur output adalah apa yang Anda harapkan.

Tentu, secara teknis Anda tidak memiliki jaminan langsung yang sinus.wavbenar - 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.

Kilian Foth
sumber