Catatan awal
Saya tidak akan membahas perbedaan jenis tes yang ada, sudah ada beberapa pertanyaan di situs ini mengenai hal itu.
Saya akan mengambil apa yang ada di sana dan yang mengatakan: pengujian unit dalam arti "menguji unit isolasi terkecil dari aplikasi" dari mana pertanyaan ini sebenarnya berasal
Masalah isolasi
Apa unit terkecil yang dapat dipisahkan dari suatu program. Yah, seperti yang saya lihat, itu (sangat?) Tergantung pada bahasa apa yang Anda coding.
Micheal Feathers berbicara tentang konsep jahitan : [WEwLC, p31]
Jahitan adalah tempat di mana Anda dapat mengubah perilaku di program Anda tanpa mengedit di tempat itu.
Dan tanpa masuk ke detailnya, saya memahami sebuah jahitan - dalam konteks pengujian unit - untuk menjadi tempat dalam program di mana "tes" Anda dapat berinteraksi dengan "unit" Anda.
Contohnya
Tes unit - terutama di C ++ - memerlukan dari kode yang diuji untuk menambahkan lebih banyak jahitan yang akan secara ketat dipanggil untuk masalah yang diberikan.
Contoh:
- Menambahkan antarmuka virtual di mana implementasi non-virtual sudah cukup
- Memisahkan - menyamaratakan (?) - kelas (bertubuh kecil) lebih lanjut "hanya" untuk memfasilitasi menambahkan tes.
- Memisahkan proyek yang dapat dieksekusi tunggal menjadi lib yang tampaknya "independen", "hanya" untuk memudahkan penyusunannya secara independen untuk pengujian.
Pertanyaan
Saya akan mencoba beberapa versi yang semoga bertanya tentang hal yang sama:
- Apakah cara Unit Tests mengharuskan seseorang untuk menyusun kode aplikasi "hanya" bermanfaat untuk pengujian unit atau itu sebenarnya bermanfaat bagi struktur aplikasi.
- Apakah generalisasi kode yang diperlukan untuk membuatnya unit-testable berguna untuk apa pun selain unit test?
- Apakah menambahkan tes unit memaksa seseorang untuk melakukan generalisasi yang tidak perlu?
- Apakah tes bentuk unit berlaku pada kode "selalu" juga bentuk yang baik untuk kode secara umum seperti yang terlihat dari domain masalah?
Saya ingat aturan praktis yang mengatakan jangan menyamaratakan sampai Anda perlu / sampai ada tempat kedua yang menggunakan kode. Dengan Tes Unit, selalu ada tempat kedua yang menggunakan kode - yaitu tes unit. Jadi, apakah alasan ini cukup untuk digeneralisasi?