JUnit ile birim testleri

Java'da Teste Giriş

Maria Milusheva

Senior Software Engineer

Birim testi - tanım

İki temel kavram:

Birim (unit) - Bir uygulamanın test edilebilir en küçük parçası; örn. bir yöntem

Birim testi - Uygulamanın diğer bölümlerinden yalıtılmış tek bir “birim” kodun doğruluğunu sınayan test

Java'da Teste Giriş

Birim testi ayrıntılarla ilgilidir

Notlar:

  • Birim testi büyük resim değil, küçük mantık parçaları ile ilgilidir

  • Diğer test türleri büyük resme odaklanır (ör. entegrasyon)

  • JUnit adını, temel kullanım alanı birim testi olduğundan alır

Birim testleri ile üretim kodu arasındaki ilişkiyi sezgisel olarak gösteren bir görsel

Java'da Teste Giriş

Test türleri - kısa genel bakış

  • Bu derste çoğunlukla birim ve entegrasyon testlerini ele alacağız
  • Ancak birçok test türü vardır!

Birim testleri gibi işlevsel testleri ve kullanılabilirlik testi gibi işlevsel olmayan testleri içeren yazılım testleri diyagramı

Java'da Teste Giriş

Test türleri - kısa genel bakış

  • Bu derste çoğunlukla birim ve entegrasyon testlerini ele alacağız
  • Ancak birçok test türü vardır!

Birim testleri gibi işlevsel testleri ve kullanılabilirlik testi gibi işlevsel olmayan testleri içeren yazılım testleri diyagramı. Bu sürümde birim ve entegrasyon testi daire içine alınmıştır

Java'da Teste Giriş

JUnit söz dizimi: assertTrue() ve assertFalse()

  • assertTrue() bir ifadenin doğru olduğunu kontrol eder:
List<String> list = new ArrayList<>();

assertTrue(list.isEmpty()); // Hata yok
  • assertFalse() bunun tersini kontrol eder:
List<String> list = new ArrayList<>();
list.add("A");

assertFalse(list.isEmpty()); // Hata yok
Java'da Teste Giriş

assertNull() ve assertNotNull()

null değişkenler NullPointerException oluşturabilir!

  • Bir değişkenin null olup olmadığını kontrol eden iddialar: assertNull() ve assertNotNull()

  • Yaygın kullanım: bir yerden alınan değerin null olmadığını kontrol etmek

Map<String, Integer> catalogue = new HashMap<>();

catalogue.put("item1", 10);

// Hata yok
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Java'da Teste Giriş

Özel durumları doğrulama

Bir ArrayIndexOutOfBoundsException fırlatıldığını doğrulamak istediğimizi varsayalım:

public String getIndex(String[] array, int index) {
    return array[index];
}

JUnit bunu yapmak için birden çok yol sunar!

Java'da Teste Giriş

assertInstanceOf()

  • JUnit assertThrows() sağlar, ancak gelişmiş Java söz dizimi (lambda ifadeleri) kullanır

  • Bunun yerine assertInstanceOf() şöyle kullanılabilir:

try {
    getIndex(new String[]{}, 4);
} catch (Exception e) {
    // Beklenen özel durum sınıfını ve özel durum nesnesini geçin  
    assertInstanceOf(ArrayIndexOutOfBoundsException.class, e); 
}
1 https://www.baeldung.com/junit-assert-exception
Java'da Teste Giriş

Birim testlerini adlandırma

  • Tipik bir projede yüzlerce birim testi bulunur

  • Hafif ve anlaşılır olmalıdırlar

  • Bilgilendirici adlara sahip olmalıdırlar; böylece biri başarısız olursa sorunu ilk bakışta görürüz

Örneğin: methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Java'da Teste Giriş

Haydi pratik yapalım!

Java'da Teste Giriş

Preparing Video For Download...