Mantığı doğru uyguladıktan sonra test hala başarısız olursa TDD'deki en iyi eylem yolu nedir (testte bir hata olduğu için)?
Örneğin, aşağıdaki işlevi geliştirmek istediğinizi varsayalım:
int add(int a, int b) {
return a + b;
}
Aşağıdaki adımlarda geliştirdiğimizi varsayalım:
Test yaz (henüz işlev yok):
// test1 Assert.assertEquals(5, add(2, 3));Derleme hatasıyla sonuçlanır.
Bir kukla işlev uygulaması yazın:
int add(int a, int b) { return 5; }Sonuç:
test1geçer.Başka bir test durumu ekle:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));Sonuç:
test2başarısız,test1hala geçiyor.Gerçek uygulamayı yaz:
int add(int a, int b) { return a + b; }Sonuç:
test1hala geçer,test2hala başarısız olur (o zamandan beri11 != 12).
Bu özel durumda: daha iyi olurdu:
- düzeltin
test2ve şimdi geçtiğini veya - Uygulamanın yeni bölümünü silin (yani yukarıdaki 2. adıma geri dönün), düzeltin
test2ve başarısız olmasına izin verin ve sonra doğru uygulamayı yeniden ekleyin (yukarıdaki 4. adım).
Yoksa daha zekice bir yolu var mı?
Örnek problemin önemsiz olduğunu anlasam da, iki durumun eklenmesinden daha karmaşık olabilecek jenerik davada ne yapılması gerektiği ile ilgileniyorum.
EDIT (@Thomas Junk'un cevabına cevaben):
Bu sorunun odağı, TDD'nin önerdiği şeydir, iyi kod veya testlerin (TDD yolundan farklı olabilir) başarılması için “en iyi evrensel uygulama” ne değildir.