@CsvSource ve @MethodSource ile Parametreli Testler
@ParameterizedTest, @CsvSource ve @MethodSource kullanarak aynı testi birden çok girdi kümesiyle çalıştırın.
@CsvSource ve @MethodSource ile Parametreli Testler, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Parametreli Sınamalar Neden Kullanılır?
Aynı sınama mantığını birden çok girdi kümesiyle çalıştırmak, sınama yöntemlerini kopyalayıp yapıştırmadan uç durumları ortaya çıkarır. JUnit 5, parametreli sınamaları @ParameterizedTest ile yerel olarak destekler.
@ValueSource: Basit Tek Değerli Sınamalar
@ValueSource, belirli bir türde tek bir parametre sağlar. Sınama her değer için bir kez çalışır.
@ParameterizedTest
@ValueSource(strings = {"", " ", "\t"})
void blank_strings_are_rejected(String input) {
assertThrows(IllegalArgumentException.class, () -> validator.validate(input));
}@CsvSource: Satır İçi Birden Çok Parametre
@CsvSource, virgülle ayrılmış değerlerden oluşan satırlar sağlar. Her satır bir sınama çağrısıdır. Dize değerlerindeki virgülleri kaçışlamak için tek tırnak kullanın.
@ParameterizedTest
@CsvSource({
"Alice, 30, true",
"Bob, 17, false",
"Carol, 0, false"
})
void test_adult_check(String name, int age, boolean expectedAdult) {
User user = new User(name, age);
assertEquals(expectedAdult, user.isAdult());
}@CsvSource ile delimiterString
Birden çok karakterden oluşan ayraçlar için veya verileriniz virgül içerdiğinde delimiterString kullanın. Bir belirteç dizesini null değerine eşlemek için nullValues kullanın.
@ParameterizedTest
@CsvSource(value = {
"Alice | 30 | ADMIN",
"Bob | 25 | USER"
}, delimiterString = "|")
void test_roles(String name, int age, String role) { ... }@CsvFileSource: Harici Veri Dosyaları
Sınama verilerini sınıf yolundaki bir CSV dosyasından yükleyin. Sınama kodunu karmaşıklaştıracak büyük veri kümeleri için kullanışlıdır.
@ParameterizedTest
@CsvFileSource(resources = "/test-data/users.csv", numLinesToSkip = 1)
void test_from_file(String name, int age, boolean expected) {
assertEquals(expected, service.isEligible(name, age));
}@MethodSource: Karmaşık Parametreler
@MethodSource, Stream<Arguments> döndüren statik bir fabrika yöntemini çağırır. Her Arguments.of() bir sınama çağrısıdır. Karmaşık nesneler için kullanın.
@ParameterizedTest
@MethodSource("provideOrders")
void test_total_calculation(Order order, BigDecimal expected) {
assertEquals(expected, orderService.calculateTotal(order));
}
static Stream<Arguments> provideOrders() {
return Stream.of(
Arguments.of(new Order(List.of(item(10), item(20))), BigDecimal.valueOf(30)),
Arguments.of(new Order(List.of()), BigDecimal.ZERO)
);
}@EnumSource: Tüm Numaralandırma Değerlerini Sınama
@EnumSource, sınamayı her numaralandırma sabiti için bir kez çalıştırır. Belirli değerleri dahil etmek veya hariç tutmak için mode ve names kullanın.
@ParameterizedTest
@EnumSource(value = UserStatus.class, mode = EnumSource.Mode.EXCLUDE, names = "DELETED")
void test_active_statuses(UserStatus status) {
assertTrue(notificationService.shouldNotify(status));
}@NullAndEmptySource
null ve boş dize girdilerini sınamanın kısa yoludur. @NullSource + @EmptySource kullanarak @ValueSource ile birleştirin veya birleşik @NullAndEmptySource ek açıklamasını kullanın.
@ParameterizedTest
@NullAndEmptySource
void null_and_empty_are_invalid(String input) {
assertFalse(validator.isValid(input));
}Özel Görüntüleme Adları
Sınamanın görüntüleme adını biçimlendirmek için @ParameterizedTest içinde name kullanın. Yer tutucular: {index}, {0}, {1}, {arguments}.
@ParameterizedTest(name = "age={1} should be adult={2}")
@CsvSource({"Alice, 30, true", "Bob, 17, false"})
void test_adult(String name, int age, boolean expected) { ... }@ArgumentsSource ile Kaynakları Birleştirme
Tamamen özel argüman üretimi için ArgumentsProvider uygulayın: veritabanlarından, dosyalardan veya API'lerden dinamik veriler alabilirsiniz.
public class UserArgumentsProvider implements ArgumentsProvider {
public Stream<? extends Arguments> provideArguments(ExtensionContext ctx) {
return Stream.of(
Arguments.of(new User("Alice", 30)),
Arguments.of(new User("Bob", 17))
);
}
}
@ParameterizedTest
@ArgumentsSource(UserArgumentsProvider.class)
void test_user(User user) { ... }Sınır Değerleri için Parametreli Sınamalar
Sınır koşullarını sistematik olarak sınayın: min-1, min, max, max+1. Parametreli sınamalar, sınır kapsamını okunabilir ve sürdürülebilir kılar.
@ParameterizedTest
@CsvSource({"0, false", "1, true", "100, true", "101, false"})
void test_range_boundaries(int value, boolean expected) {
assertEquals(expected, validator.isInRange(value, 1, 100));
}Kısa Kontrol
Her sınama çağrısının parametrelerini hangi dönüş türündeki @MethodSource sağlar?
Özet
Satır içi tablo verileri için @CsvSource, karmaşık nesneler için @MethodSource, tüm numaralandırma değerleri için @EnumSource ve null/boş uç durumları için @NullAndEmptySource kullanın. name= ile özel adlar, sınama okunabilirliğini artırır.
Sıkça Sorulan Sorular
“@CsvSource ve @MethodSource ile Parametreli Testler” dersi ücretsiz mi?
Evet — “@CsvSource ve @MethodSource ile Parametreli Testler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“@CsvSource ve @MethodSource ile Parametreli Testler” dersinde ne öğreneceğim?
@ParameterizedTest, @CsvSource ve @MethodSource kullanarak aynı testi birden çok girdi kümesiyle çalıştırın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“@CsvSource ve @MethodSource ile Parametreli Testler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- @CsvSource ve @MethodSource ile Parametreli Testler
- Mockito İleri Düzey: Bağımsız Değişken Yakalayıcıları ve Casuslar
- Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest
- Testcontainers: Gerçek Veritabanı Tümleştirme Testleri