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.
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.
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'
}
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.
Die Ergebnisse der Testausführung sind in der folgenden Abbildung dargestellt. Es wurde für 10 Stück getestet.
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.
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