Apa tindakan terbaik dalam TDD jika, setelah menerapkan logika dengan benar, tes masih gagal (karena ada kesalahan dalam tes)?
Misalnya, Anda ingin mengembangkan fungsi berikut:
int add(int a, int b) {
return a + b;
}
Misalkan kita mengembangkannya dalam langkah-langkah berikut:
Tes tulis (belum berfungsi):
// test1 Assert.assertEquals(5, add(2, 3));Menghasilkan kesalahan kompilasi.
Menulis implementasi fungsi dummy:
int add(int a, int b) { return 5; }Hasil:
test1melewati.Tambahkan test case lain:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));Hasil:
test2gagal,test1masih lewat.Tulis implementasi nyata:
int add(int a, int b) { return a + b; }Hasil:
test1masih lewat,test2masih gagal (sejak11 != 12).
Dalam kasus khusus ini: apakah akan lebih baik untuk:
- memperbaiki
test2, dan melihat bahwa itu sekarang lewat, atau - hapus bagian implementasi yang baru (yaitu kembali ke langkah # 2 di atas), perbaiki
test2dan biarkan gagal, dan kemudian masukkan kembali implementasi yang benar (langkah # 4. di atas).
Atau ada cara lain yang lebih pintar?
Sementara saya mengerti bahwa contoh masalah agak sepele, saya tertarik pada apa yang harus dilakukan dalam kasus generik, yang mungkin lebih kompleks daripada penambahan dua angka.
EDIT (Menanggapi jawaban dari @Thomas Junk):
Fokus pertanyaan ini adalah apa yang disarankan TDD dalam kasus seperti itu, bukan apa yang "praktik terbaik universal" untuk mencapai kode atau tes yang baik (yang mungkin berbeda dari cara TDD).