Java'da Teste Giriş
Maria Milusheva
Senior Software Engineer
Şimdiye kadar yalnızca üretim kodundan sonra test yazdık.
TDD, üretim kodundan önce test yazarak yapılır
Neden TDD?
1. Üretim kodundan önce başarısız bir test yazmalısınız
2. Mümkün olan en kısa testi yazmalısınız
3. Testin geçmesi için yeterli olandan fazla üretim kodu yazmamalısınız
Bunları sırayla uygulamak = bir TDD döngüsü
Geliştirme, tekrarlanan TDD döngüleriyle ilerler
Diyelim ki bir tamsayının palindrom olup olmadığını denetleyen bir yöntem yazmak istiyoruz
Palindrom tamsayı örnekleri: 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() is not yet written
}
Bir test, gelecekteki kendimize proje gereksinimlerini hatırlatan bir not gibidir.
public boolean isPalindrome(int num) {
return false; // Testin gereksinimlerini karşılayan en az kodu yazın.
}
Test şimdi geçiyor. TDD’nin sonraki döngüsüne geçebiliriz.
Yeni test - özellikle yeni bir gereksinim:
@Test
public void isPalindrome_PalindromicInt_ReturnsTrue() {
int number = 1234321; // Şimdi daha karmaşık bir test olgusu yazın.
assertTrue(isPalindrome(number)); // Bu aşamada isPalindrome() başarısız olacaktır.
}
public boolean isPalindrome(int num) {
int inverted = 0;
while (num != 0) {
// Her yinelemede sayının son basamağını % 10 ile alın
// ve inverted * 10'a ekleyin.
inverted = inverted * 10 + num % 10;
// Son basamağı işlediğimize göre, / 10 ile atın.
num = num / 10;
}
return inverted;
}
TDD hataları düzeltmek için harikadır!
Az önce yazdığımız yöntem number = -121 için true döndürüyor. Bu doğru değil!
Hatası göstermek için bir birim testi yazarız:
@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
int number = -121; // Palindrom değil; -121, 121- ile aynı değildir.
assertFalse(isPalindrome(number));
}
public boolean isPalindrome(int num) {
if (num < 0) {
return false; // Negatif değerler için false döndürmek üzere bir koşul ekleriz.
}
int inverted = 0;
while (num != 0) {
inverted = inverted * 10 + num % 10;
num = num / 10;
}
return inverted;
}
Java'da Teste Giriş