Saya cenderung memihak kolega Anda, tetapi hanya sampai titik tertentu.
Masalah dengan tes unit adalah bahwa mereka sering dan tanpa berpikir ditulis pada kasus-kasus sepele di mana penyelidikan sepintas kode mengungkapkan bahwa itu akan berhasil tidak peduli apa. Contohnya:
def add(x, y)
x + y
end
Bersama dengan selusin tes untuk memastikan bahwa penambahan itu memang akan bekerja untuk kasus penggunaan yang dipilih secara sewenang-wenang. Duh ...
Premis umum di balik pengujian unit adalah: jika kode Anda tidak mengandung bug, itu karena Anda belum cukup menguji. Sekarang, kapan harus menulis tes unit yang tepat. Jawaban:
- Saat Anda menguji
- Saat Anda debugging
- Ketika Anda sedang mengembangkan hal-hal yang sangat rumit
Mari kita telusuri masing-masing, seandainya Anda sedang mengembangkan semacam aplikasi web.
Anda menulis beberapa kode ke fungsionalitas baru, dan seharusnya sudah bekerja dengan cukup baik sekarang. Anda kemudian menjangkau browser Anda dan memverifikasi bahwa itu bekerja dengan menguji lebih intensif, bukan? Bzzzt! ... Jawaban salah. Anda menulis tes unit. Jika Anda tidak melakukannya sekarang, Anda mungkin tidak akan pernah melakukannya. Dan ini adalah salah satu tempat di mana tes unit bekerja dengan sangat baik: untuk menguji fungsionalitas tingkat tinggi.
Anda kemudian menemukan bug (yang tidak pernah ketinggalan?). Ini membawa kita ke poin dua. Anda menyelam kembali ke dalam kode dan mulai mengikuti langkah-langkahnya. Ketika Anda melakukannya, tulis unit test pada titik-titik penting dimana memiliki data yang konsisten dan benar sangat penting.
Poin terakhir adalah sebaliknya. Anda sedang merancang beberapa fungsi berbulu yang melibatkan banyak pemrograman meta. Dengan cepat memunculkan pohon keputusan dengan ribuan skenario potensial, dan Anda perlu memastikan bahwa masing-masing dari mereka yang terakhir berfungsi. Saat menulis hal-hal seperti itu, perubahan yang tampak sederhana di sini atau di sana dapat memiliki konsekuensi yang tak terbayangkan lebih lanjut dalam rantai makanan. Katakanlah, Anda sedang merancang implementasi MPTT menggunakan pemicu SQL - sehingga bisa bekerja dengan pernyataan multi-baris.
Dalam lingkungan berduri seperti ini, Anda biasanya ingin mengotomatisasi tes Anda. Jadi, Anda menulis skrip untuk mengotomatiskan pembuatan data uji, dan menjalankan sejumlah besar unit uji pada data uji ini. Satu hal penting untuk tidak kehilangan jejak saat Anda melakukan ini, adalah bahwa Anda juga perlu menulis unit test untuk generator unit test Anda.
Intinya: tes unit, pasti ya. Tapi luangkan diri Anda dengan fungsionalitas dasar - sampai Anda benar-benar membutuhkannya untuk debugging, atau memastikan beberapa fungsionalitas berbulu berfungsi dengan baik (termasuk, dalam kasus terakhir, tes itu sendiri).