Namen von parametrisierten Tests ändern
Gibt es eine Möglichkeit, meine eigenen benutzerdefinierten Testfall-Namen bei der Verwendung von parametrisierten tests in JUnit4?
Möchte ich ändern Sie die Standard — [Test class].runTest[n]
— für etwas sinnvolles.
InformationsquelleAutor der Frage Epaga | 2009-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Funktion hat es in JUnit 4.11.
Verwenden, ändern Sie den Namen des parametrisierten tests, sagen Sie:
namestring
ist eine Zeichenfolge, die die folgenden Platzhalter:{index}
- index-dieser Satz von Argumenten. Die Standard -namestring
ist{index}
.{0}
- der erste parameter mit dem Wert aus dieser Aufruf der test.{1}
- der zweite parameter WertDer endgültige name der Prüfung der name der Prüfung Methode, gefolgt von der
namestring
in Klammern, wie unten gezeigt.Beispiel (adaptiert von den unit-test für die
Parameterized
Anmerkung):geben Namen wie
testFib[1: fib(1)=1]
undtestFib[4: fib(4)=3]
. (DietestFib
Teil des namens ist der name der Methode der@Test
).InformationsquelleAutor der Antwort rescdsk
Blick auf JUnit 4.5, seine Läufer eindeutig nicht unterstützen, so wie diese Logik ist begraben in einem privaten Klasse in der Parametrisierten Klasse. Sie konnten nicht die JUnit Parametrisierte Läufer, und erstellen Sie Ihre eigenen, anstatt, die verstehen würden, das Konzept der Namen (das führt zu der Frage, wie Sie könnte ein name ...).
Vom JUnit-Perspektive, wäre es schön, wenn statt (oder zusätzlich zu) einfach vorbeikommen, ein Inkrement, Sie würde übergeben Sie die durch Komma getrennten Argumenten. TestNG dies tut. Wenn die Funktion wichtig für Sie ist, können Sie Kommentar über die yahoo-mailing-Liste referenziert http://www.junit.org.
InformationsquelleAutor der Antwort Yishai
Kurzem stieß ich auf das gleiche problem bei der Verwendung von JUnit 4.3.1. Ich habe implementiert eine neue Klasse, die sich Parametrisiert aufgerufen LabelledParameterized. Es wurde getestet mit JUnit 4.3.1, 4.4 und 4.5. Es rekonstruiert die Beschreibung Instanz, die mit der Zeichenkette des ersten Arguments, jedes Parameters array aus den @ - Parameter-Methode. Sehen Sie den code für diese:
http://code.google.com/p/migen/source/browse/trunk/java/src/.../LabelledParameterized.java?r=3789
und ein Beispiel für seine Verwendung bei:
http://code.google.com/p/migen/source/browse/trunk/java/src/.../ServerBuilderTest.java?r=3789
Den test Beschreibung-Formate gut in Eclipse, die ist, was ich wollte, da macht das fehlgeschlagene tests viel einfacher zu finden! Ich werde wohl weiter zu verfeinern und dokumentieren die Klassen in den nächsten Tagen/Wochen. Tropfen der '? ' - Teil des URLs, wenn Sie wollen, dass die bleeding edge. 🙂
Um es zu verwenden, alles, was Sie tun müssen ist, kopieren Sie die Klasse (GPL v3), und ändern Sie @RunWith(Parameterized.class) @RunWith(LabelledParameterized.class) vorausgesetzt, das erste element der parameter-Liste ist eine sinnvolle Bezeichnung.
Ich weiß nicht, ob spätere Versionen von JUnit-Adresse dieses Problem, aber selbst wenn Sie es Taten, ich kann nicht aktualisieren, JUnit da alle meine co-Entwickler müssten update auch, und wir haben höhere Prioritäten als re-tooling. Damit die Arbeit in der Klasse zu kompilierbar sein, die von mehreren Versionen von JUnit.
Hinweis: es gibt einige Reflexion jiggery-pokery, so dass es läuft über die verschiedenen JUnit-Versionen, wie oben aufgeführt. Die version speziell für JUnit 4.3.1 gefunden werden kann hier und für JUnit 4.4 und 4.5, hier.
InformationsquelleAutor der Antwort darrenp
Mit
Parameterized
als Modell, ich schrieb meine eigenen test-runner /suite-nur dauerte etwa eine halbe Stunde. Es ist ein wenig anders aus darrenp istLabelledParameterized
Sie können einen Namen angeben, der explizit anstatt sich auf das erste parameter isttoString()
.Es ist auch nicht die arrays verwenden, weil ich es hasse arrays. 🙂
Und ein Beispiel:
InformationsquelleAutor der Antwort David Moles
von junit4.8.2 erstellen Sie Ihre eigenen MyParameterized Klasse, indem Sie einfach kopieren Parametrisierten Klasse. ändern Sie die getName () - und testName () - Methoden in TestClassRunnerForParameters.
InformationsquelleAutor der Antwort yliang
Können Sie auch wollen, um zu versuchen, JUnitParams: http://code.google.com/p/junitparams/
InformationsquelleAutor der Antwort dsaff
Können Sie eine Methode erstellen, wie
Während ich würde nicht verwenden es die ganze Zeit, es wäre nützlich, um genau herauszufinden, welche Nummer 143 ist.
InformationsquelleAutor der Antwort
Ich machen ausgiebigen Gebrauch von statischen import für die Geltendmachung und Freunde, so ist es leicht für mich zu definieren Behauptung:
Zum Beispiel könnten Sie fügen Sie ein "name" - Feld, um Ihre test-Klasse, initialisiert im Konstruktor und Anzeige, die auf test-Fehler. Geben Sie einfach es in, wie die ersten Elemente des Parameter-Arrays für jeden test. Dies hilft auch, die Beschriftung der Daten:
InformationsquelleAutor der Antwort binkley
Keiner es war, für mich zu arbeiten, daher hab ich die Quelle für Parametriert und modifiziert es schaffen eine neue test-runner. Ich habe nicht zu viel ändern, aber ES FUNKTIONIERT!!!
InformationsquelleAutor der Antwort Christian
Workaround wäre, zu fangen und zu nest alle Throwables in eine neue Throwable mit einer benutzerdefinierten Nachricht, die enthält alle Informationen über die Parameter. Die Nachricht erscheint in der Stapel-Ablaufverfolgung.
Das funktioniert, wenn ein test fehlschlägt, für alle Behauptungen, Fehler und Ausnahmen, da Sie alle Unterklassen von Throwable.
Mein code sieht wie folgt aus:
Den stack-trace der test fehlgeschlagen ist:
InformationsquelleAutor der Antwort mmirwaldt
Check-out JUnitParams als dsaff erwähnt, funktioniert mit ant zu bauen parametrisierte Testmethode Beschreibungen in der html-Bericht.
Dieser war nach dem Versuch LabelledParameterized und finden, dass es, obwohl es funktioniert mit eclipse funktioniert es nicht mit der Ameise so weit wie der html-Bericht ist besorgt.
Cheers,
InformationsquelleAutor der Antwort quarkonium
Da die parameter zugegriffen werden (z.B. mit
"{0}"
gibt immer dietoString()
Darstellung, eine Abhilfe wäre, eine anonyme Implementierung und überschreibentoString()
in jedem Fall. Zum Beispiel:InformationsquelleAutor der Antwort Sina Madani