[JAVA] Une méthode prend en charge plusieurs cas de test avec @ParameterizedTest!

Aperçu

Ce que vous pouvez faire avec @ParameterizedTest

    @Test
    public void sample1() {
        assertThat("a".length()).isEqualTo(1);
    }

    @Test
    public void sample2() {
        assertThat("b".length()).isEqualTo(1);
    }

(Je n'écrirai pas un tel test, mais comme échantillon ...)

--Lors de l'utilisation

    @ParameterizedTest
    @ValueSource(strings = {"a", "b"})
    public void sample(String string) {
        assertThat(string.length()).isEqualTo(1);
    }

Vous pouvez combiner plusieurs tests simplement en ajoutant un paramètre à l'argument de @ ValueSource comme ceci.

Il existe plusieurs façons de spécifier les paramètres, je vais donc les présenter ci-dessous.

@ValueSource

String --Peut gérer les caractères vides et les caractères vides, mais ne peut pas gérer la valeur null --Si vous souhaitez gérer null, utilisez @ MethodSource décrit plus loin.

    @ParameterizedTest
    @ValueSource(strings = {"a", "b", "c"})
    public void string(String value) {
        System.out.println("string: " + value);
    }

Résultat d'exécution


string: 'a'
string: 'b'
string: 'c'
string: ''
string: '   '

int

    @ParameterizedTest
    @ValueSource(ints = {1, 2 ,3})
    public void ints(int value) {
        System.out.println("ints: " + value);
    }

Résultat d'exécution


ints: 1
ints: 2
ints: 3

@CsvSource

    @ParameterizedTest
    @CsvSource({"1, val1", "2, val2", "3, val3"})
    public void csv(int num, String value) {  //Recevoir un nombre comme un entier
        System.out.println("num: '" + num + "', value: '" + value + "'");
    }
    @ParameterizedTest
    @CsvSource({"1, val1", "2, val2", "3, val3"})
    public void csv(String num, String value) {  //Recevoir un nombre sous forme de chaîne
        System.out.println("num: '" + num + "', value: '" + value + "'");
    }

Résultat d'exécution


num: '1', value: 'val1'
num: '2', value: 'val2'
num: '3', value: 'val3'
    @ParameterizedTest
    @CsvSource({"Caractères vides, ''", "Caractère vierge, '   '", "null, "})
    public void csv(String type, String value) {
        System.out.println(type + ": '" + value + "'");
    }

Résultat d'exécution


Caractères vides: ''
Caractère vierge: '   '
null: 'null'

@EnumSource --Peut être utilisé lorsque vous souhaitez tester en fonction de la définition de la classe enum --Si vous spécifiez names ou mode, vous pouvez inclure, exclure, etc. --mode est par défaut ʻINCLUDE`

Classe d'énumération à utiliser


    enum SampleEnum {
        ENUM1,
        ENUM2,
        ENUM3
    }

Tous les cas


    @ParameterizedTest
    @EnumSource(SampleEnum.class)
    public void enumSource(SampleEnum value) {
        System.out.println("enum: " + value);
    }

Résultat d'exécution


enum: ENUM1
enum: ENUM2
enum: ENUM3

include


    @ParameterizedTest
    @EnumSource(value = SampleEnum.class, names = {"ENUM1", "ENUM2"})
    public void enumInclude(SampleEnum value) {
        System.out.println("enum: " + value);
    }

Résultat d'exécution


enum: ENUM1
enum: ENUM2

exclude


    @ParameterizedTest
    @EnumSource(value = SampleEnum.class, names = {"ENUM1", "ENUM2"}, mode = EnumSource.Mode.EXCLUDE)
    public void enumExclude(SampleEnum value) {
        System.out.println("enum: " + value);
    }

Résultat d'exécution


enum: ENUM3

@MethodSource

    @ParameterizedTest
    @MethodSource("source")
    public void methodSource(String value) {
        System.out.println("value: " + value);
    }

    public static Stream<String> source() {
        return Stream.of("string1", "string2", null);
    }

Résultat d'exécution


value: string1
value: string2
value: null

Recommended Posts

Une méthode prend en charge plusieurs cas de test avec @ParameterizedTest!
MASCHINE teste la régression linéaire avec plusieurs variables
Obtenez plusieurs enregistrements de manière conditionnelle avec la méthode where
Comment enregistrer dans plusieurs tables avec une seule entrée
Mélanger les cas de test avec JUnit 5 et les méthodes par défaut