In unserem Projekt habe ich mehrere JUnit- Tests, die z. B. jede Datei aus einem Verzeichnis entnehmen und einen Test darauf ausführen. Wenn ich eine testEveryFileInDirectory
Methode implementiere, wird TestCase
dies als nur ein Test angezeigt, der fehlschlagen oder erfolgreich sein kann. Aber ich interessiere mich für die Ergebnisse jeder einzelnen Datei. Wie kann ich ein TestCase
/ TestSuite
so schreiben, dass jede Datei als separater Test angezeigt wird, z. B. im grafischen TestRunner von Eclipse? (Das Codieren einer expliziten Testmethode für jede Datei ist keine Option.)
Vergleichen Sie auch die Frage ParameterizedTest mit einem Namen in Eclipse Testrunner .
java
unit-testing
junit
parameterized-unit-test
Hans-Peter Störr
quelle
quelle
Antworten:
Schauen Sie sich parametrisierte Tests in JUnit 4 an.
Eigentlich habe ich das vor ein paar Tagen gemacht. Ich werde versuchen zu erklären ...
Erstellen Sie zuerst Ihre Testklasse normal, da Sie nur mit einer Eingabedatei testen. Dekorieren Sie Ihre Klasse mit:
Erstellen Sie einen Konstruktor, der die Eingabe übernimmt, die sich bei jedem Testaufruf ändert (in diesem Fall kann es sich um die Datei selbst handeln).
Erstellen Sie dann eine statische Methode, die ein
Collection
Array zurückgibt. Jedes Array in der Auflistung enthält die Eingabeargumente für Ihren Klassenkonstruktor, z. B. die Datei. Dekorieren Sie diese Methode mit:Hier ist eine Beispielklasse.
Überprüfen Sie auch dieses Beispiel
quelle
Einheit 3
Einheit 4
quelle
Junit 5 Parametrisierte Tests
Parametrisierte JUnit 5- Tests unterstützen dies, indem sie die Verwendung einer Methode als Datenquelle ermöglichen :
JUnit 5 DynamicTests
JUnit 5 unterstützt dies auch durch den Begriff a
DynamicTest
, der in a@TestFactory
mittels der statischen Methode erzeugt werden solldynamicTest
.Die in Ihrer IDE (IntelliJ hier) ausgeführten Tests werden folgendermaßen angezeigt:
quelle
Sollte in JUnit 3 möglich sein, indem
TestSuite
dietests()
Methode zum Auflisten der Dateien geerbt und überschrieben wird und für jede Rückgabe eine Instanz einer Unterklasse vonTestCase
den Dateinamen als Konstruktorparameter verwendet und über eine Testmethode verfügt, die die im Konstruktor angegebene Datei testet.In JUnit 4 könnte es noch einfacher sein.
quelle
Sie könnten die Verwendung der JUnitParams-Bibliothek in Betracht ziehen , damit Sie einige weitere (sauberere) Optionen haben:
Weitere Anwendungsbeispiele finden Sie hier .
Darüber hinaus ist es einfacher und lesbarer, JUnitParams mit parametrisierten Tests zu schreiben :
quelle
Wenn TestNG eine Option ist, können Sie Parameter mit DataProvidern verwenden .
Das Ergebnis jeder einzelnen Datei wird im textbasierten Bericht oder in der Benutzeroberfläche des TestNG-Plugins von Eclipse angezeigt. Die Anzahl der insgesamt durchgeführten Tests zählt jede Ihrer Dateien einzeln.
Dieses Verhalten unterscheidet sich von JUnit Theories , bei denen alle Ergebnisse unter einem "Theorie" -Eintrag zusammengefasst sind und nur als 1 Test gelten. Wenn Sie eine separate Ergebnisberichterstattung in JUnit wünschen, können Sie parametrisierte Tests ausprobieren .
Test und Eingaben
Beispielausgabe
quelle
Ich hatte ein ähnliches Problem und schrieb schließlich einen einfachen JUnit 4-Runner, mit dem med dynamisch Tests generieren kann.
https://github.com/kimble/junit-test-factory
quelle