[JAVA] Eine Methode unterstützt mehrere Testfälle mit @ParameterizedTest!

Überblick

Was Sie mit @ParameterizedTest tun können

--Wenn unbenutzt

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

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

(Ich werde keinen solchen Test schreiben, aber als Beispiel ...)

--Beim Benutzen

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

Sie können mehrere Tests kombinieren, indem Sie dem Argument von "@ ValueSource" wie folgt einen Parameter hinzufügen.

Es gibt verschiedene Möglichkeiten, die Parameter anzugeben, daher werde ich sie im Folgenden vorstellen.

@ValueSource

String

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

Ausführungsergebnis


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);
    }

Ausführungsergebnis


ints: 1
ints: 2
ints: 3

@CsvSource

    @ParameterizedTest
    @CsvSource({"1, val1", "2, val2", "3, val3"})
    public void csv(int num, String value) {  //Erhalten Sie eine Nummer als int
        System.out.println("num: '" + num + "', value: '" + value + "'");
    }
    @ParameterizedTest
    @CsvSource({"1, val1", "2, val2", "3, val3"})
    public void csv(String num, String value) {  //Erhalte eine Nummer als String
        System.out.println("num: '" + num + "', value: '" + value + "'");
    }

Ausführungsergebnis


num: '1', value: 'val1'
num: '2', value: 'val2'
num: '3', value: 'val3'
    @ParameterizedTest
    @CsvSource({"Leerer Charakter, ''", "Leerer Charakter, '   '", "null, "})
    public void csv(String type, String value) {
        System.out.println(type + ": '" + value + "'");
    }

Ausführungsergebnis


Leerer Charakter: ''
Leerer Charakter: '   '
null: 'null'

@EnumSource

Aufzählungsklasse verwenden


    enum SampleEnum {
        ENUM1,
        ENUM2,
        ENUM3
    }

Alle Fälle


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

Ausführungsergebnis


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);
    }

Ausführungsergebnis


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);
    }

Ausführungsergebnis


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);
    }

Ausführungsergebnis


value: string1
value: string2
value: null

Recommended Posts

Eine Methode unterstützt mehrere Testfälle mit @ParameterizedTest!
MASCHINE testet lineare Regression mit mehreren Variablen
Mit der where-Methode können Sie mehrere Datensätze bedingt abrufen
So speichern Sie mit einer Eingabe in mehreren Tabellen
Mischen Sie Testfälle mit JUnit 5 und Standardmethoden