JUnit ErrorCollector @Rule mit Beispiel
⚡ Intelligente Zusammenfassung
JUnit ErrorCollector ist eine Regel, die es einem Test ermöglicht, nach einem Fehler weiterzulaufen, indem sie alle Fehlerobjekte sammelt und diese nach Abschluss der Testmethode zusammen meldet, anstatt den Test zu stoppen.ping beim ersten Problem.
In einem normalen Szenario würden Sie jedes Mal, wenn Sie während der Testausführung einen Fehler feststellen, den Test stoppen, den Fehler beheben und den Test erneut ausführen.
Doch JUnit verfolgt einen etwas anderen Ansatz. Mit dem JUnit Dank des Fehlersammlers kann die Testausführung auch dann fortgesetzt werden, wenn ein Problem auftritt oder der Test fehlschlägt. Der Fehlersammler erfasst alle Fehlerobjekte und meldet sie nur einmal, nach Abschluss der Testausführung.
Warum Error Collector verwenden?
Beim Schreiben eines Testskripts möchten Sie alle Tests ausführen, selbst wenn eine Codezeile aufgrund eines Netzwerkfehlers, eines Assertionsfehlers oder aus einem anderen Grund fehlschlägt. In diesem Fall können Sie die Ausführung des Testskripts mithilfe einer speziellen Funktion fortsetzen. JUnit bekannt als „Fehlersammler“.
Dafür, JUnit verwendet das @Rule-AnmerkungDiese Methode dient zur Erstellung eines Fehlersammlerobjekts. Sobald das Fehlersammlerobjekt erstellt ist, können Sie mithilfe der Methode alle Fehler einfach dem Objekt hinzufügen. addError (auslösbarer Fehler). Wie du weißt, Werfen ist die Superklasse der Exception und Fehler Klassen in JavaWenn Sie auf diese Weise Fehler hinzufügen, werden diese Fehler protokolliert. JUnit Testergebnis.
Der Vorteil, alle Fehler in einem Fehlersammler zu erfassen, besteht darin, dass Sie alle Fehler gleichzeitig überprüfen können. Selbst wenn das Skript mittendrin fehlschlägt, wird die Ausführung bis zum Ende der Testmethode fortgesetzt.
HinweisBei Verwendung einer einfachen Assert-Anweisung oder eines try/catch-Blocks ist die Verwendung der Fehlersammelmethode nicht möglich.
Beispielcode
Um mehr über den Fehlersammler zu erfahren, sehen Sie sich das folgende Codebeispiel an, das zeigt, wie Sie ein Fehlersammlerobjekt erstellen und alle Fehler diesem Objekt hinzufügen. track das Problem:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
Hinweis: Dies ist ein illustratives Beispiel.tract ist keine kompilierbare Datei. Der nachfolgende Kommentar wird ohne führendes // in eine zweite Zeile umgebrochen, und getResults() sowie die Hamcrest-Matcher werden nicht angezeigt. Die vollständige lauffähige Version folgt unter Beispiel mit ErrorCollector.
Was ist @Rule in JUnit?
JUnit bietet eine besondere Art der Testbehandlung. Testfall oder Testsuite mithilfe der @Rule-AnmerkungMit @Rule können Sie das Verhalten des Tests einfach hinzufügen oder neu definieren.
Es gibt mehrere integrierte Regeln, die vom System bereitgestellt werden. JUnit Es gibt eine API, die ein Tester verwenden kann, und Sie können auch Ihre eigene Regel schreiben. Ein Regelfeld muss öffentlich, nicht statisch und von einem Typ sein, der TestRule implementiert.
Die folgende Codezeile zeigt, wie die @Rule-Annotation zusammen mit dem Error Collector verwendet wird:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit Anmerkung für 5: Jupiter hat die Regeln durch die Extension API ersetzt, daher existieren @Rule und ErrorCollector in org.junit.jupiter nicht. Die nächstliegenden Entsprechungen sind Assertions.assertAll() und AssertJ SoftAssertions. JUnit Der hier gezeigte Code 4 läuft noch immer durch den Oldtimer-Motor. Siehe den JUnit Anmerkungen Anleitung für die vollständige Karteping.
Beispiel mit ErrorCollector
Um den Fehlersammler zu verstehen, erstellen wir eine Klasse und eine Regel, die alle Fehler sammelt. Sie fügen alle Fehler hier mit `addError(throwable)` hinzu.
Der unten stehende Code erstellt lediglich eine Regel, die nichts anderes als ein „Fehlersammelobjekt“ ist. Dieses wird anschließend verwendet, um alle Fehler hinzuzufügen und das Problem am Ende zu melden:
ErrorCollectorExample.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
TestRunner.java
Fügen wir die obige Testklasse einem Test-Runner hinzu und führen wir sie aus, um alle Fehler zu erfassen. Siehe den folgenden Code:
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Ausgang:
Siehe das Versagen trace, welches tracEs fasst alle Fehler an einem Ort zusammen. JUnit Die Ansicht zählt einen Durchlauf, meldet aber zwei Fehler und einen Ausfall, jeweils mit eigener Zeilennummer:
Vorteile der JUnit ErrorCollector
Sie können eine JUnit Behauptung für die funktionale oder GUI-Validierung, zum Beispiel:
- assertEquals(String message, Object expected, Object actual), das vergleicht, ob zwei Objekte gleich sind.
- In ähnlicher Weise stellt „asserTrue(Boolesche Bedingung)“ fest, dass eine Bedingung wahr ist.
Mithilfe von Assertions wird das Validierungstesten vereinfacht. Ein großes Problem besteht jedoch darin, dass die Testausführung selbst dann abbricht, wenn eine einzige Assertion fehlschlägt.
Die Kontinuität und Wiederherstellung von Tests ist entscheidend für den Erfolg der Testautomatisierung und spielt insbesondere bei langen Testläufen eine wichtige Rolle. Selenium Bei Anwendungen, bei denen das Neustarten des Browsers nach jedem fehlgeschlagenen Check aufwändig ist, ist der Error Collector die beste Lösung für solche Szenarien.

