5.1 @ParameterizedTest notu

Bazen testi farklı parametrelerle birden çok kez çağırmak istersiniz: farklı değerler, farklı giriş parametreleri, farklı kullanıcı adları. JUnit hayatınızı kolaylaştırmayı amaçlar, bu nedenle bu durumda parametreleştirilmiş testler gibi bir şeye sahiptir.

Parametreli testleri kullanmak için, şuna bir bağımlılık daha eklemeniz gerekir pom.xml:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

O zaman bir örnek düşünebiliriz:

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethod(int argument) {
    //test code
}

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

Her test metodu 3 defa çağrılacak ve her çağrıldığında kendisine başka bir parametre iletilecektir. Değerler, başka bir ek açıklama - @ValueSource kullanılarak ayarlanır . Ama bunun hakkında daha çok şey söylenmesi gerekiyor.

5.2 @ValueSource notu

@ValueSource ek açıklaması, ilkel ve hazır değerlerle çalışmak için harikadır. Sadece parametre değerlerini virgülle ayırarak listeleyin ve test her değer için bir kez çağrılır.

@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

Ancak bir eksi de var - bu açıklama null'u desteklemiyor, bu nedenle bunun için özel bir koltuk değneği kullanmanız gerekecek - @NullSource . Şuna benziyor:

@ParameterizedTest
@NullSource
void testMethodNullSource(Integer argument) {
    assertTrue(argument == null);
}

5.3 @EnumSource notu

Ayrıca , belirli bir Enum'un tüm değerlerini yönteme ileten özel bir açıklama @EnumSource vardır . Uygulaması şöyle görünür:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

@ParameterizedTest
@EnumSource(Direction.class)
void testWithEnumSource(Direction d) {
    assertNotNull(d);
}

5.4 @MethodSource notu

Ancak nesneleri parametre olarak nasıl iletebilirim? Özellikle karmaşık bir inşaat algoritmasına sahiplerse. Bunu yapmak için, bu tür değerlerin bir listesini (Akış) döndürecek özel bir yardımcı yöntem belirtebilirsiniz.

Örnek:

@ParameterizedTest
@MethodSource("argsProviderFactory")
void testWithMethodSource(String argument) {
    assertNotNull(argument);
}

static Stream<String> argsProviderFactory() {
    return Stream.of("one", "two",  "three");
}

Çoklu Bağımsız Değişkenli Parametreli Testler

Elbette, yönteme birkaç parametre iletmek istiyorsanız ne yapacağınızı zaten merak ettiniz. Bunun için çok güzel bir @CSVSource ek açıklaması var . Yöntem parametrelerinin değerlerini virgülle ayırarak listelemenizi sağlar.

Örnek:

@ParameterizedTest
@CsvSource({
    "alex, 30, Programmer, Working",
    "brian, 35, Tester, Working",
	"charles, 40, manager, kicks"
})
void testWithCsvSource(String name, int age, String occupation, String status) {
	//method code
}