CodeBlanks Logo Icon CodeBlanks

@ParameterizedTest

@ParameterizedTest ile parametreli testleri öğrenirsin.

@ParameterizedTest

Aynı testi farklı girdilerle çalıştırmak için @ParameterizedTest kullanılır. @ValueSource ile basit değer dizisi verirsin; her değer için test bir kez çalışır.

@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testPositive(int number) {
    assertTrue(number > 0);
}

Bu, aynı testi kopyalayıp yapıştırmaktan daha temizdir. Her girdi ayrı bir test olarak raporlanır; biri başarısız olursa diğerleri yine de çalışır. ints, strings, doubles gibi tipler kullanılabilir.

@CsvSource ile çoklu girdi

Birden fazla bağımsız değişken gerekiyorsa @CsvSource kullanılır. Her satır virgülle ayrılmış değerler içerir; bunlar test yöntemine parametre olarak geçer.

@ParameterizedTest
@CsvSource({"2, 3, 5", "4, 4, 8"})
void testAdd(int a, int b, int expected) {
    assertEquals(expected, a + b);
}

Bu, tablo benzeri test verisi sağlar. Her satır ayrı bir senaryodur ve kendi sonucunu üretir. Karmaşık senaryolar için @MethodSource ile bir akış (Stream) döndüren fabrika yöntemi de kullanılabilir.

Uygulama Pozitif sayı testini parametreli yaz

Bir NumberTest sınıfı tanımla. @ParameterizedTest ve @ValueSource(ints = {1, 2, 3, 4}) ile işaretli testPositive yöntemi yaz; parametre int number olsun ve assertTrue(number > 0) çağrılsın. Bir main metodu ekle; 1, 2 ve 3 değerlerini döngüde denetle ve kaçının pozitif olduğunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.*;

// NumberTest sınıfını tanımla

// parametreli test annotation'ı ve değer kaynağı annotation'ı ile testPositive yaz

// main metodu ekle ve pozitif sayıların sayısını yazdır

Örnek çözüm

Main.java
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.*;

class NumberTest {
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4})
    void testPositive(int number) {
        assertTrue(number > 0);
    }

    public static void main(String[] args) {
        int count = 0;
        for (int n : new int[]{1, 2, 3}) {
            if (n > 0) count++;
        }
        System.out.println(count);
    }
}

Beklenen çıktı

3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 @ParameterizedTest ile hangi annotation birlikte kullanılır?

  • @Test
  • @ValueSource Doğru cevap
  • @BeforeEach
  • @DisplayName

Açıklama: @ValueSource ile girdi değerleri sağlanır.

2 Kaynak annotation'larını eşleştir

Kavram Anlamı
@ValueSource Tek tip basit dizi
@CsvSource Virgülle ayrılmış satırlar
@MethodSource Akış döndüren fabrika
@EnumSource Enum değerleri

3 ValueSource çağrısını tamamla

Soru
@ParameterizedTest
@____(strings = {"a", "b"})
void testLetter(String s) {
    assertNotNull(s);
}
Cevap
@ParameterizedTest
@ValueSource(strings = {"a", "b"})
void testLetter(String s) {
    assertNotNull(s);
}

Açıklama: @ValueSource ile basit değer dizisi sağlanır.

İleri seviye bölümündeki tüm dersler