unit test yazarken eger ki bir de tdd yonetimin izlersek fikirlerimi belirteyim. simdi tdd derken, once testi yaziyorsunuz. Bunu yaparsaniz oncelikle derleme hatasi alacaksiniz cunku daha ortada test etmeye calistiginiz sinif bile yok. Simdi bu anlamasi zor bir konsept oldugu icin biraz acmak lazim bunu. Ornek olarak Bir web sayfasini indirip, icindeki emailleri toplayan bir kod yazacaksiniz diyelim.
Bu basit kod parcasi ile bircok modulden olusuyor, ama su an test etmek istedigim EmailBul isimli bir fonskiyon, bu fonksiyon geriye string donuyor ve parametre olarakta string aliyor mesela html parcasi gibi. Bunun imzasi soyle olabilir:
PHP Kodu:
public string EmailBul(string HtmlText);
Simdi daha koda bile baslamadan once testi yapabiliriz aslinda:
PHP Kodu:
[Test]
public void EmailBul_Should_Return_EmptyString_When_ThereIs_NO_Email()
{
string NoEmail="test";
string foundEmail = EmailBul(NoEmail);
Assert.AreEqual(String.Empty,foundEmail);
}
Simdi bu kod ilk basta derlemeyecek bile, simdi henuz EmailBul nedir yazmadik. Ama bu red alan unit test sayesinde, aslinda programi sadece test etmedik ayni zamanda yavas yavas dokumantasyon, ileride bakimi yapacak kisiye yardim, ve de loosely coupled yazmaya basladik.
Simdi yapilmasi gereken sey, kodun derlenmesi ve testin gecmesi icin minimum kodu yazmak.
Ornek olarak
PHP Kodu:
public string EmailBul(string HtmlKod)
{
string emailPattern= @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
Regex regEmail = new Regex(emailPattern);
//kodun geri kalani
}
simdi diger testleri yazmak gerekiyor, ama testleri yazarken (once test yazarsan koddan once) muhtemelen su testler aklina gelecek
1. eger htmlKod hic karakter yoksa fonksiyonum ne doner
2. acaba birden fazla email varsa ne olacak
bu testleri yazip bunlarin gecmesi icin kodlari yazarsan, sunlari gerceklestirmis olacak:
1. yazdigin testler olcusunde kodun calisiyor
2. farkinda olmadan bagimsiz kod parcasi yazdin (eger kodun icinde baska bir yere bagimlilik olsaydi mesela veritabani baglantisi gibi, unit test yazamazdin mock etmek zorunda kalirdin)
3. senden sonra koda bakan kisi, testlerin isimlerini okuyup fonksiyonlarin ne yaptigini hangi kosullarda calismasi gerektigini biliyor. kodun dokumantasyounun (developer icin) yapmis oluyorsun
4. ileride kodunda ufacik degisiklik yapsan, testleri tekrar calistiginda , degisikligin probleme yol acip acmadigini aninda goruyorsun.
5. testleri onceden yazdigin icin kodunu onceden dizayn etmis oluyorsun
zaman kaybi olmuyor buyuk projelerde, cunku debugging suresi azaliyor
Bookmarks