Test güdümlü geliştirme

Java'da Teste Giriş

Maria Milusheva

Senior Software Engineer

Test Güdümlü Geliştirme

Şimdiye kadar yalnızca üretim kodundan sonra test yazdık.

  • Test Güdümlü Geliştirme (TDD), testlerin tasarımı yönlendirdiği bir tekniktir
  • TDD, üretim kodundan önce test yazarak yapılır

  • Neden TDD?

Java'da Teste Giriş

TDD’nin faydaları

  • TDD ile geliştirme, proje gereksinimlerini daha iyi karşılamayı sağlar
  • Anında doğrulama – yazdığımız her kodun zaten testi vardır
  • Testlere dayalı kodlama, daha temiz ve iyi yapılandırılmış kod üretir
Java'da Teste Giriş

TDD’nin yasaları

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

1 https://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html
Java'da Teste Giriş

Palindrom testi

  • Diyelim ki bir tamsayının palindrom olup olmadığını denetleyen bir yöntem yazmak istiyoruz

  • Palindrom tamsayı örnekleri: 12321, 0, 3333

Java'da Teste Giriş

Herhangi bir kod yazmadan önce başarısız bir test yazın

@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.

Java'da Teste Giriş

Testin geçmesi için en az kodu yazın

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.

Java'da Teste Giriş

Başka bir test yazın

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.
}
Java'da Teste Giriş

Yöntemi uygulayın

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;
}
Java'da Teste Giriş

TDD ile hata düzeltme

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));
}
Java'da Teste Giriş

TDD ile hata düzeltme

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ş

Hadi pratik yapalım!

Java'da Teste Giriş

Preparing Video For Download...