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:
test1
melewati.Tambahkan test case lain:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Hasil:
test2
gagal,test1
masih lewat.Tulis implementasi nyata:
int add(int a, int b) { return a + b; }
Hasil:
test1
masih lewat,test2
masih 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
test2
dan 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).