0Pricing
Java Academy · Leçon

Essais paramétrés avec @CsvSource et @MethodSource

Exécutez le même essai avec plusieurs ensembles de données d’entrée en utilisant @ParameterizedTest, @CsvSource et @MethodSource.

Essais paramétrés avec @CsvSource et @MethodSource est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Pourquoi utiliser des tests paramétrés ?

Exécuter la même logique de test avec plusieurs ensembles de données d'entrée révèle les cas limites sans copier-coller les méthodes de test. JUnit 5 prend nativement en charge les tests paramétrés avec @ParameterizedTest.

@ValueSource : tests simples à valeur unique

@ValueSource fournit un seul paramètre d'un type donné. Le test s'exécute une fois par valeur.

@ParameterizedTest
@ValueSource(strings = {"", "  ", "\t"})
void blank_strings_are_rejected(String input) {
    assertThrows(IllegalArgumentException.class, () -> validator.validate(input));
}

@CsvSource : plusieurs paramètres intégrés

@CsvSource fournit des lignes de valeurs séparées par des virgules. Chaque ligne correspond à une exécution du test. Utilisez des apostrophes pour échapper les virgules dans les valeurs textuelles.

@ParameterizedTest
@CsvSource({
    "Alice, 30, true",
    "Bob,   17, false",
    "Carol, 0,  false"
})
void test_adult_check(String name, int age, boolean expectedAdult) {
    User user = new User(name, age);
    assertEquals(expectedAdult, user.isAdult());
}

@CsvSource avec delimiterString

Utilisez delimiterString pour les séparateurs composés de plusieurs caractères ou lorsque vos données contiennent des virgules. Utilisez nullValues pour convertir une chaîne sentinelle en valeur null.

@ParameterizedTest
@CsvSource(value = {
    "Alice | 30 | ADMIN",
    "Bob   | 25 | USER"
}, delimiterString = "|")
void test_roles(String name, int age, String role) { ... }

@CsvFileSource : fichiers de données externes

Chargez les données de test depuis un fichier CSV présent dans le classpath. Cette solution est utile pour les jeux de données volumineux qui encombreraient le code de test.

@ParameterizedTest
@CsvFileSource(resources = "/test-data/users.csv", numLinesToSkip = 1)
void test_from_file(String name, int age, boolean expected) {
    assertEquals(expected, service.isEligible(name, age));
}

@MethodSource : paramètres complexes

@MethodSource appelle une méthode fabrique statique qui renvoie un Stream<Arguments>. Chaque Arguments.of() correspond à une exécution du test. Utilisez cette annotation pour les objets complexes.

@ParameterizedTest
@MethodSource("provideOrders")
void test_total_calculation(Order order, BigDecimal expected) {
    assertEquals(expected, orderService.calculateTotal(order));
}
static Stream<Arguments> provideOrders() {
    return Stream.of(
        Arguments.of(new Order(List.of(item(10), item(20))), BigDecimal.valueOf(30)),
        Arguments.of(new Order(List.of()),                   BigDecimal.ZERO)
    );
}

@EnumSource : tester toutes les valeurs d'une énumération

@EnumSource exécute le test une fois pour chaque constante de l'énumération. Utilisez mode et names pour inclure ou exclure certaines valeurs.

@ParameterizedTest
@EnumSource(value = UserStatus.class, mode = EnumSource.Mode.EXCLUDE, names = "DELETED")
void test_active_statuses(UserStatus status) {
    assertTrue(notificationService.shouldNotify(status));
}

@NullAndEmptySource

Raccourci pour tester les entrées null et les chaînes vides. Combinez @ValueSource avec @NullSource et @EmptySource, ou utilisez directement @NullAndEmptySource.

@ParameterizedTest
@NullAndEmptySource
void null_and_empty_are_invalid(String input) {
    assertFalse(validator.isValid(input));
}

Noms d'affichage personnalisés

Utilisez name dans @ParameterizedTest pour formater le nom d'affichage du test. Espaces réservés : {index}, {0}, {1}, {arguments}.

@ParameterizedTest(name = "age={1} should be adult={2}")
@CsvSource({"Alice, 30, true", "Bob, 17, false"})
void test_adult(String name, int age, boolean expected) { ... }

Combiner les sources avec @ArgumentsSource

Implémentez ArgumentsProvider pour générer les arguments de façon entièrement personnalisée : données dynamiques provenant de bases de données, de fichiers ou d'API.

public class UserArgumentsProvider implements ArgumentsProvider {
    public Stream<? extends Arguments> provideArguments(ExtensionContext ctx) {
        return Stream.of(
            Arguments.of(new User("Alice", 30)),
            Arguments.of(new User("Bob", 17))
        );
    }
}
@ParameterizedTest
@ArgumentsSource(UserArgumentsProvider.class)
void test_user(User user) { ... }

Tests paramétrés des valeurs limites

Testez systématiquement les conditions limites : min-1, min, max, max+1. Les tests paramétrés rendent la couverture des limites lisible et facile à maintenir.

@ParameterizedTest
@CsvSource({"0, false", "1, true", "100, true", "101, false"})
void test_range_boundaries(int value, boolean expected) {
    assertEquals(expected, validator.isInRange(value, 1, 100));
}

Vérification rapide

Quel type de retour de @MethodSource fournit les arguments de chaque exécution du test ?

Récapitulatif

Utilisez @CsvSource pour les données tabulaires intégrées, @MethodSource pour les objets complexes, @EnumSource pour toutes les valeurs d'une énumération et @NullAndEmptySource pour les cas limites nulles ou vides. Les noms personnalisés avec name= améliorent la lisibilité des tests.

Questions Fréquemment Posées

La leçon « Essais paramétrés avec @CsvSource et @MethodSource » est-elle gratuite ?

Oui — le texte complet de « Essais paramétrés avec @CsvSource et @MethodSource » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Essais paramétrés avec @CsvSource et @MethodSource » ?

Exécutez le même essai avec plusieurs ensembles de données d’entrée en utilisant @ParameterizedTest, @CsvSource et @MethodSource. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Essais paramétrés avec @CsvSource et @MethodSource » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Essais paramétrés avec @CsvSource et @MethodSource
  2. Mockito avancé : captureurs d’arguments et espions
  3. Tranches d’essai Spring Boot : @WebMvcTest et @DataJpaTest
  4. Testcontainers : essais d’intégration avec une vraie base de données
← Retour à Java Academy