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ç:
test1
geçer.Başka bir test durumu ekle:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Sonuç:
test2
başarısız,test1
hala geçiyor.Gerçek uygulamayı yaz:
int add(int a, int b) { return a + b; }
Sonuç:
test1
hala geçer,test2
hala başarısız olur (o zamandan beri11 != 12
).
Bu özel durumda: daha iyi olurdu:
- düzeltin
test2
ve ş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
test2
ve 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.