@ParameterizedTest
- Java kursu
- İleri seviye
- Ders 46/82
- 5 dk
@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
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
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
@ParameterizedTest
@____(strings = {"a", "b"})
void testLetter(String s) {
assertNotNull(s);
}
@ParameterizedTest
@ValueSource(strings = {"a", "b"})
void testLetter(String s) {
assertNotNull(s);
}
Açıklama: @ValueSource ile basit değer dizisi sağlanır.