[JAVA] Verwenden Sie @ValueSource von ParametrisedTest von JUnit5

Überblick

Dieser Eintrag beschreibt die Verwendung von "@ValueSource" von "Parametrised Test", wodurch das Schreiben eines Tests mit verschiedenen Parametern beim Schreiben eines Komponententests in JUnit5 vereinfacht wird.

Dies ist der Eintrag für den zweiten Tag von Adventskalender 2019 zur Erstellung eines Unternehmensrechners.

Angenommener Leser

JUnit 5 Parametrisierter Test

JUnit5 ist ein Testframework, das JUnit4 grundlegend überarbeitet. Einige Funktionen wurden vollständig entfernt, während andere hinzugefügt wurden.

Zu den neu hinzugefügten Funktionen gehört "Parametrisierte Tests". Auf diese Weise können Sie einen Test einfach schreiben, indem Sie verschiedene Arten von Werten als Parameter an die Argumente eines Testfalls übergeben.

Vorbereitung

Gemäß der Dokumentation muss das Artefakt "junit-jupiter-params" verfügbar sein, um parametrisierte Tests ausführen zu können. Dieser Eintrag verwendet SpringBoot und verwendet zum Testen den Spring-Boot-Starter-Test, in diesem Fall jedoch den Spring-Boot Durch einfaches Schreiben einer Zeile von -starter-test wird auch die Abhängigkeit von junit-jupiter-params angegeben.

Die folgenden Spezifikationen werden in build.gradle eingegeben. Mit SpringInitializr spezifizierte er auch, dass "junit-vintage-engine", die laufende Tests unterstützt, die in JUnit3 und Junit4 geschrieben wurden, nicht verwendet werden sollte.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}

Schreiben Sie einen Test mit @ValueSource

Beim Schreiben von JUnit verwende ich "AssertJ", um die Ergebnisse zu überprüfen, da mir die Lesbarkeit gefällt. Die folgende Zeile wird zu build.gradle hinzugefügt.

	testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.14.0'

Unten finden Sie ein Beispiel für eine Quelle zum Testen mit ValueSource.


    @ParameterizedTest
    @ValueSource(chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'})
    public void push_single_success(char c) {
        DeskCalculator dc = new DeskCalculator();
        dc.pushChar(c);
        assertThat(dc.getCurrentValue()).isEqualTo(new BigDecimal(new String(new char[]{c})));
    }

Die "pushChar" -Methode der DeskCalculator-Klasse, auf die in diesem Test abgezielt wird, hat die folgenden Funktionen.

  1. Geben Sie das Zeichen für den numerischen Wert ("0-9" und ".") Ein und bewahren Sie es im internen Puffer auf.
  2. Ignoriere alles andere
  3. Behalten Sie den internen numerischen Puffer als Zeichenfolge in der Instanz. Wenn der Wert von außen abgefragt wird, wird er von Big Decimal zurückgegeben.

Die Ergebnisse der Testausführung sind in der folgenden Abbildung dargestellt. Es wurde für 10 Stück getestet.

コメント 2019-12-11 081737.png

Ich habe die obigen Zahlen getestet, aber ich werde auch den folgenden Test schreiben, um das zweite Verhalten zu sehen.

    @ParameterizedTest
    @ValueSource(chars = {'+', '-', '*', '/', 'A', '!', ' '})
    public void push_single_invalid_char_success(char c) {
        DeskCalculator dc = new DeskCalculator();
        dc.pushChar(c);
        assertThat(dc.getCurrentValue()).isEqualTo(BigDecimal.ZERO);
    }

Wie in den beiden obigen Beispielen erwähnt, werden durch Übergeben mehrerer Parameter an den @ ValueSource-Teil Tests für mehrere Werte ausgeführt.

abschließend

In diesem Eintrag haben wir den "parametrisierten Test" behandelt, der in JUnit 5 hinzugefügt wurde. Zusätzlich zu @ValueSource bietet ParametrisedTest eine Funktion zum Übergeben mehrerer Argumente und eine Funktion zum Lesen eines Werts aus der CSV.

Der in diesem Eintrag verwendete Code wird markiert und auf GitHub gespeichert. https://github.com/hrkt/commandline-calculator/releases/tag/0.0.3

Recommended Posts

Verwenden Sie @ValueSource von ParametrisedTest von JUnit5
Verwendung der Datumsklasse
Verwendung von JUnit (Anfänger)
[Erstellen] Verwendung von JUnit
Verwenden Sie enum anstelle der int-Konstante
Verwenden Sie redirect_to und rendern Sie richtig
Verwendung von setDefaultCloseOperation () von JFrame
Ordnungsgemäße Verwendung von Mockito und PowerMock
Ihre Verwendung von JobScheduler ist falsch