5.1 @ParameterizedTest megjegyzés

Néha egyszerűen meg akarja hívni a tesztet többször különböző paraméterekkel: különböző értékekkel, különböző bemeneti paraméterekkel, különböző felhasználónevekkel. A JUnit célja, hogy megkönnyítse az Ön életét, ezért erre az esetre van egy olyan dolog, mint a paraméterezett tesztek.

A paraméterezett tesztek használatához még egy függőséget kell hozzáadnia a következőhöz pom.xml:

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

Akkor megfontolhatunk egy példát:

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

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

Minden vizsgálati módszer háromszor lesz meghívva, és minden alkalommal egy másik paraméter kerül átadásra. Az értékek egy másik annotációval vannak beállítva - @ValueSource . De erről többet kell mondani.

5.2 @ValueSource annotáció

A @ValueSource annotáció kiválóan alkalmas primitívekkel és literálokkal való munkához. Csak adja meg a paraméterértékeket vesszővel elválasztva, és a teszt minden értékhez egyszer kerül meghívásra.

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

De van egy mínusz is - ez a megjegyzés nem támogatja a nullát, ezért ehhez speciális mankót kell használnia - @NullSource . Ez így néz ki:

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

5.3 @EnumSource annotáció

Van egy speciális @EnumSource megjegyzés is , amely egy adott Enum összes értékét átadja a metódusnak. Alkalmazása így néz ki:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

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

5.4 @MethodSource annotáció

De hogyan adjunk át objektumokat paraméterként? Főleg, ha bonyolult építési algoritmusuk van. Ehhez egyszerűen megadhat egy speciális helper metódust, amely az ilyen értékek listáját (Stream) adja vissza.

Példa:

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

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

Paraméterezett tesztek több argumentummal

Természetesen már elgondolkozott már azon, hogy mit tegyünk, ha több paramétert szeretnénk átadni a metódusnak. Ehhez van egy nagyon klassz @CSVSource annotáció . Lehetővé teszi a metódusparaméterek értékeinek felsorolását egyszerűen vesszővel elválasztva.

Példa:

@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
}