JUnit ErrorCollector @Rule mit Beispiel

Inhaltsverzeichnis:

Anonim

In einem normalen Szenario würden Sie den Test stoppen, den Fehler beheben und den Test erneut ausführen, wenn Sie während der Testausführung einen Fehler feststellen.

Aber JUnit hat einen etwas anderen Ansatz. Mit dem JUnit-Fehlersammler können Sie die Testausführung auch dann fortsetzen, wenn ein Problem gefunden wurde oder der Test fehlschlägt. Der Fehlersammler sammelt alle Fehlerobjekte und meldet sie nur einmal, nachdem die Testausführung beendet ist.

In diesem Tutorial lernen Sie:

  • Was ist ein Fehlersammler in JUnit?
  • Was ist @Rule in jUnit?
  • Beispiel mit ErrorCollector
  • Vorteile von JUnit ErrorCollector

Warum Error Collector verwenden?

Während Sie ein Testskript schreiben, möchten Sie alle Tests ausführen, auch wenn eine Codezeile aufgrund eines Netzwerkfehlers, eines Assertionsfehlers oder eines anderen Grundes fehlschlägt. In dieser Situation können Sie das Testskript weiterhin mit einer speziellen Funktion von JUnit ausführen, die als "Fehlersammler" bezeichnet wird.

Zu diesem Zweck verwendet JUnit die Annotation @Rule , mit der ein Objekt des Fehlersammlers erstellt wird. Sobald das Objekt für den Fehlersammler erstellt wurde, können Sie mit der Methode addError (Throwable error) problemlos alle Fehler zum Objekt hinzufügen. Wie Sie wissen, ist Throwable die Superklasse der Ausnahme- und Fehlerklasse in Java. Wenn Sie auf diese Weise Fehler hinzufügen, werden diese Fehler im JUnit-Testergebnis protokolliert.

Das Hinzufügen aller Fehler in einem Fehlerkollektor hat den Vorteil, dass Sie alle Fehler gleichzeitig überprüfen können. Wenn das Skript in der Mitte fehlschlägt, kann es trotzdem weiter ausgeführt werden

Hinweis : Bei Verwendung eines einfachen Assert- oder Try / Catch-Blocks ist die Verwendung der Fehlerkollektormethode nicht möglich.

Beispielcode

Weitere Informationen zu Error Collector finden Sie im folgenden Codebeispiel, in dem gezeigt wird, wie Sie ein Error Collector-Objekt erstellen und alle Fehler in diesem Objekt hinzufügen, um das Problem zu verfolgen:

Paket guru99.junit;import org.junit.Rule;import org.junit.Test;import org.junit.rules.ErrorCollector;öffentliche Klasse ErrorCollectorExample {@Regelpublic ErrorCollector collector = new ErrorCollector ();@Prüfungpublic void example () {collector.addError (new Throwable ("In der ersten Zeile ist ein Fehler aufgetreten"));collector.addError (new Throwable ("In der zweiten Zeile ist ein Fehler aufgetreten"));collector.checkThat (getResults (),not (enthältString ("hier ist ein Fehler")));// Alle Codezeilen werden ausgeführt und am Ende wird ein kombinierter Fehler ausgeführtangemeldet sein.}}}}

Was ist @Rule in jUnit?

JUnit bietet eine spezielle Art der Behandlung von Tests, Testfällen oder Testsuiten mithilfe der Annotation @rule . Mit @rule können Sie das Verhalten des Tests einfach hinzufügen oder neu definieren.

Die JUnit-API bietet mehrere integrierte Regeln, die ein Tester verwenden kann, oder Sie können sogar unsere eigene Regel schreiben.

In der folgenden Codezeile wird gezeigt, wie die Annotation @rule zusammen mit Error Collector verwendet wird:

@Regelpublic ErrorCollector collector = new ErrorCollector ();

Beispiel mit ErrorCollector

Um den Fehlersammler zu verstehen, erstellen wir eine Klasse und eine Regel, um alle Fehler zu sammeln. Sie werden alle Fehler mit addError (Throwable) hier hinzufügen.

Siehe folgenden Code, der einfach eine Regel erstellt, die nichts anderes ist als das Erstellen eines "Error Collector-Objekts". Welches wird weiter verwendet, um alle Fehler hinzuzufügen, um das Problem am Ende zu melden:

ErrorCollectorExample.java

Paket guru99.junit;import org.junit.Assert;import org.junit.Rule;import org.junit.Test;import org.junit.rules.ErrorCollector;öffentliche Klasse ErrorCollectorExample {@Regelpublic ErrorCollector collector = new ErrorCollector ();@Prüfungpublic void example () {collector.addError (new Throwable ("In der ersten Zeile ist ein Fehler aufgetreten"));collector.addError (new Throwable ("In der zweiten Zeile ist ein Fehler aufgetreten"));System.out.println ("Hallo");Versuchen {Assert.assertTrue ("A" == "B");} catch (Throwable t) {collector.addError (t);}}System.out.println ("Welt !!!!");}}}}

TestRunner.java

Fügen wir die obige Testklasse in einen Testläufer ein und führen Sie sie aus, um alle Fehler zu sammeln. Siehe folgenden Code:

Paket guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;öffentliche Klasse TestRunner {public static void main (String [] args) {Ergebnis result = JUnitCore.runClasses (ErrorCollectorExample.class);for (Fehler Fehler: result.getFailures ()) {System.out.println (fail.toString ());}}System.out.println ("Result ==" + result.wasSuccessful ());}}}}

Ausgabe:

Siehe die Fehlerverfolgung, die alle Fehler an einem Ort verfolgt:

Vorteile von JUnit ErrorCollector

Sie können die JUnit-Zusicherung für die Funktions- oder GUI-Validierung verwenden, z

  1. assertEquals (String-Nachricht, Objekt erwartet, Objekt tatsächlich), die vergleichen, dass zwei Objekte gleich sind.
  2. In ähnlicher Weise bestätigt assertTrue (Boolesche Bedingung), dass eine Bedingung wahr ist.

Mit Assertion wird der Validierungstest einfach. Ein Hauptproblem ist jedoch, dass die Testausführung auch dann gestoppt wird, wenn eine einzelne Zusicherung fehlschlägt.

Testkontinuität und Wiederherstellungshandhabung sind entscheidend für den Erfolg der Testautomatisierung. Error Collector ist der beste Weg, um mit solchen Szenarien umzugehen.

Zusammenfassung :

  • Mit Junit Error Collector kann ein Test auch dann fortgesetzt werden, wenn das erste Problem gefunden wurde und der Test am Ende fehlschlägt
  • Der Fehlersammler sammelt alle Fehlerobjekte und meldet sie erst, wenn die Testausführung beendet ist
  • Das Hinzufügen aller Fehler in einem Fehlerkollektor hat den Vorteil, dass Sie alle Fehler gleichzeitig überprüfen können
  • Der Fehlersammler fügt einfach Fehler hinzu, indem er die von ErrorCollector.java bereitgestellte Methode addError (throwable err) verwendet.