TDD yaparken ve bir birim testi yazarken, test ettiğiniz "uygulama" kodunun ilk yinelemesini yazarken "hile yapma" dürtüsüne nasıl karşı çıkılır?
Örneğin:
Bir sayının Faktörünü hesaplayalım. Birim testiyle başladım (MSTest kullanarak).
[TestClass]
public class CalculateFactorialTests
{
[TestMethod]
public void CalculateFactorial_5_input_returns_120()
{
// Arrange
var myMath = new MyMath();
// Act
long output = myMath.CalculateFactorial(5);
// Assert
Assert.AreEqual(120, output);
}
}
Bu kodu çalıştırıyorum ve CalculateFactorial
metot bile olmadığından başarısız oluyor . Bu yüzden, test edilen yöntemi uygulamak için kodu ilk kez tekrarlıyorum ve testi geçmek için gereken minimum kodu yazıyorum .
Mesele şu, sürekli olarak aşağıdakileri yazmaya teşvik ediyorum:
public class MyMath
{
public long CalculateFactorial(long input)
{
return 120;
}
}
Bu teknik olarak doğrudur, çünkü gerçekten belirli bir test geçişi yapmak için gereken minimum koddur (yeşile döner), ancak açıkça bir "hile" olmasına rağmen, gerçekten bir faktoring hesaplama işlevini gerçekleştirmeye çalışmadığı için. Tabii ki, şimdi yeniden düzenleme bölümü, uygulamanın gerçek bir yeniden yapılandırması yerine, "doğru işlevi yazma" konusunda bir alıştırma haline geliyor. Açıkçası, farklı parametrelere sahip ilave testler eklemek başarısız olur ve yeniden yönlendirmeye zorlar, ancak bu testle başlamanız gerekir.
Öyleyse, benim sorum şu, hala sınamak için asgari kodu yazmakla birlikte gerçekten işlevsel tutmaya devam ederken, gerçekten başarmaya çalıştığınız şeyin ruhunda "denemek için minimum kodu yazmak" arasındaki dengeyi nasıl elde edersiniz?