CodeGym /Java Course /Module 3 /Geparametriseerde testen in Junit

Geparametriseerde testen in Junit

Module 3
Niveau 3 , Les 4
Beschikbaar

5.1 @ParameterizedTest-annotatie

Soms wil je de test gewoon meerdere keren aanroepen met verschillende parameters: verschillende waarden, verschillende invoerparameters, verschillende gebruikersnamen. JUnit is bedoeld om uw leven gemakkelijker te maken, dus in dit geval heeft het zoiets als geparametriseerde tests.

Om geparametriseerde tests te gebruiken, moet u nog een afhankelijkheid toevoegen aan uw pom.xml:

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

Dan kunnen we een voorbeeld nemen:

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

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

Elke testmethode wordt 3 keer aangeroepen en elke keer dat deze wordt aangeroepen, wordt er een andere parameter aan doorgegeven. Waarden worden ingesteld met een andere annotatie - @ValueSource . Maar er moet meer over gezegd worden.

5.2 @ValueSource-annotatie

De annotatie @ValueSource is geweldig voor het werken met primitieven en letterlijke waarden. Maak een lijst van de parameterwaarden, gescheiden door komma's, en de test wordt voor elke waarde één keer aangeroepen.

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

Maar er is ook een minpuntje - deze annotatie ondersteunt geen null, dus je zult er een speciale kruk voor moeten gebruiken - @NullSource . Het ziet er zo uit:

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

5.3 @EnumSource-annotatie

Er is ook een speciale annotatie @EnumSource , die alle waarden van een specifieke Enum doorgeeft aan de methode. De toepassing ervan ziet er als volgt uit:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

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

5.4 @MethodSource-annotatie

Maar hoe geef je objecten door als parameters? Vooral als ze een complex constructie-algoritme hebben. Om dit te doen, kunt u eenvoudig een speciale helpermethode specificeren die een lijst (Stream) van dergelijke waarden retourneert.

Voorbeeld:

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

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

Geparametriseerde tests met meerdere argumenten

Je hebt je natuurlijk al afgevraagd wat je moet doen als je meerdere parameters aan de methode wilt doorgeven. Er is hiervoor een heel coole @CSVSource- annotatie . Hiermee kunt u de waarden van de methodeparameters weergeven, eenvoudig gescheiden door komma's.

Voorbeeld:

@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
}
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION