CodeGym/Java kursus/Modul 3/Parametriserede tests i Junit

Parametriserede tests i Junit

Ledig

5.1 @ParameterizedTest annotation

Nogle gange vil du bare kalde testen flere gange med forskellige parametre: forskellige værdier, forskellige inputparametre, forskellige brugernavne. JUnit har til formål at gøre dit liv lettere, så i dette tilfælde har den sådan noget som parameteriserede tests.

For at bruge parameteriserede tests skal du tilføje endnu en afhængighed til din pom.xml:

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

Så kan vi overveje et eksempel:

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

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

Hver testmetode vil blive kaldt 3 gange, og hver gang den kaldes, vil en anden parameter blive videregivet til den. Værdier indstilles ved hjælp af en anden annotation - @ValueSource . Men der skal siges mere om det.

5.2 @ValueSource annotation

@ValueSource- annotationen er fantastisk til at arbejde med primitiver og bogstavelige. Bare skriv parameterværdierne adskilt af kommaer, og testen vil blive kaldt én gang for hver værdi.

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

Men der er også et minus - denne annotation understøtter ikke null, så du skal bruge en speciel krykke til det - @NullSource . Det ser sådan ud:

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

5.3 @EnumSource annotation

Der er også en speciel annotation @EnumSource , som overfører alle værdierne for en specifik Enum til metoden. Dens applikation ser sådan ud:

enum Direction {
    EAST, WEST, NORTH, SOUTH
}

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

5.4 @MethodSource annotation

Men hvordan sender man objekter som parametre? Især hvis de har en kompleks konstruktionsalgoritme. For at gøre dette kan du blot angive en speciel hjælpemetode, der returnerer en liste (Stream) af sådanne værdier.

Eksempel:

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

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

Parametriserede tests med flere argumenter

Selvfølgelig har du allerede spekuleret over, hvad du skal gøre, hvis du vil overføre flere parametre til metoden. Der er en meget cool @CSVSource- annotation til dette . Det giver dig mulighed for at liste værdierne af metodeparametrene, blot adskilt med kommaer.

Eksempel:

@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
}
Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu