Dernière modification : Dec 08 , 2024

Création de tests paramétrés

Les tests paramétrés permettent d'exécuter un test avec différents arguments.

Les tests sont déclarés comme des méthodes de tests classiques mais il faut utiliser l'annotation @ParameterizedTest

Les tests paramétrés consomment une source de données :

Source de données Utilisation
@ValueSource tester avec un tableau de valeurs (typées)
@NullSource tester avec la valeur nulle
@EmptySource tester avec une valeur vide
@NullAndEmptySource tester avec les valeurs nulle et vide
@EnumSource tester avec des constants d'une énumération
@MethodSource tester avec les valeurs retournées par une méthode
@CsvSource tester avec une chaine de type CSV
@CsvFileSource tester avec un fichier CSV

Il est possible d'aggréger les valeurs utilisées pour produire un unique objet Java.

Avant

  @ParameterizedTest
  @CsvSource({
      "Jane, Doe, F, 1990-05-20",
      "John, Doe, M, 1990-10-22"
  })
  void testWithArgumentsAccessor(ArgumentsAccessor arguments) {
      Person person = new Person(arguments.getString(0),
                                arguments.getString(1),
                                arguments.get(2, Gender.class),
                                arguments.get(3, LocalDate.class));

    // Test
  }


Après

@ParameterizedTest
@CsvSource({
    "Jane, Doe, F, 1990-05-20",
    "John, Doe, M, 1990-10-22"
})
void testWithArgumentsAggregator(@AggregateWith(PersonAggregator.class) Person person) {
    // perform assertions against person
}

Il est possible de créer des annotations custom

@ParameterizedTest
@CsvSource({
    "Jane, Doe, F, 1990-05-20",
    "John, Doe, M, 1990-10-22"
})
void testWithCustomAggregatorAnnotation(@CsvToPerson Person person) {
    // perform assertions against person
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@AggregateWith(PersonAggregator.class)
public @interface CsvToPerson {
}

Il est possible de personnaliser le nom des tests

@DisplayName("Display name of container")
@ParameterizedTest(name = "{index} ==> the rank of ''{0}'' is {1}")
@CsvSource({ "apple, 1", "banana, 2", "'lemon, lime', 3" })
void testWithCustomDisplayNames(String fruit, int rank) {
}

Création de tests paramétrés

Created by Sylvain Leroy


Documentation et resources