JUnit Testfälle @Before @BeforeClass-Annotation
⚡ Intelligente Zusammenfassung
JUnit ist das am weitesten verbreitete Unit-Testing-Framework für Javaund seine Test-Fixture-Annotationen steuern genau, was vor und nach dem Ausführen jeder Testmethode innerhalb einer Testklasse geschieht.
JUnit ist die beliebteste Einheit Tests Rahmen in JavaEs wird ausdrücklich empfohlen für Unit Tests. JUnit Für das Testen einer Webanwendung wird kein Server benötigt, wodurch der Testprozess beschleunigt wird.
Das JUnit Das Framework ermöglicht außerdem die schnelle und einfache Generierung von Testfällen und Testdaten. Der org.junit Das Paket besteht aus vielen Schnittstellen und Klassen für JUnit Tests wie Test, Assert, After und Before. Die umfassenderen JUnit Auf denselben Bausteinen baut die Familie auf.
Was ist eine Testvorrichtung?
Bevor wir verstehen, was eine Testvorrichtung ist, wollen wir uns den folgenden Code ansehen.
Dieser Code dient dazu, zwei Testfälle für eine einfache Datei auszuführen.
public class OutputFileTest { private File output; output = new File(...); output.delete(); public void testFile1(){ //Code to verify Test Case 1 } output.delete(); output = new File(...); public void testFile2(){ //Code to verify Test Case 2 } output.delete(); }
Hier gibt es ein paar Probleme
- Der Code ist nicht lesbar.
- Der Code ist nicht einfach zu warten.
- Wenn die Testsuite komplex ist, kann der Code logische Probleme enthalten.
Vergleichen Sie denselben Code mit JUnit.
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
Der Code ist wesentlich lesbarer und wartungsfreundlicher. Die obige Codestruktur ist eine Prüfvorrichtung.
Eine Testvorrichtung ist ein Kontext, in dem a JUnit Testfall läuft. Zu den Testvorrichtungen gehören in der Regel:
- Objekte oder Ressourcen, die für jeden Testfall verfügbar sind.
- Erforderliche Aktivitäten, um diese Objekte und Ressourcen verfügbar zu machen.
- Diese Aktivitäten sind
- Zuteilung (-Setup)
- Freigabe aufheben (Teardown).
Auf- und Abbau
Einrichtungsgegenstände sind wichtig, weil JUnit Diese Hooks werden in jedem Test ausgeführt.
- Normalerweise müssen vor jedem Testfall einige wiederholte Aufgaben erledigt werden. Ejemplo: Erstellen Sie eine Datenbankverbindung.
- Ebenso kann es am Ende jedes Testfalls zu wiederholten Aufgaben kommen. Ejemplo: zum Aufräumen, sobald die Testausführung abgeschlossen ist.
- JUnit Es bietet Annotationen, die beim Einrichten und Abbauen helfen. Es stellt sicher, dass Ressourcen freigegeben werden und das Testsystem für den nächsten Testfall bereit ist.
Diese JUnit Die Anmerkungen werden im Folgenden erläutert.
Einrichtung
@Vor Anmerkung in JUnit wird für eine Methode verwendet, die enthält Java Code, der vor jedem Testfall ausgeführt wird, d.h. er wird vor jeder Testausführung ausgeführt.
Teardown (unabhängig vom Urteil)
@Nach dem Die Annotation wird auf eine Methode angewendet, die Folgendes enthält: Java Code, der nach jedem Testfall ausgeführt wird. Diese Methoden werden auch dann ausgeführt, wenn im Testfall Ausnahmen auftreten oder Assertions fehlschlagen.
Hinweis:
- Es ist eine beliebige Anzahl der oben aufgeführten Anmerkungen zulässig.
- Alle mit kommentierten Methoden @Vor in JUnit werden vor jedem Testfall ausgeführt, sie können jedoch in beliebiger Reihenfolge ausgeführt werden.
- Sie können die Methoden `@Before` und `@After` von einer Oberklasse erben. Die Ausführung erfolgt wie folgt und ist ein Standardausführungsprozess in JUnit.
- Führen Sie die aus JUnit @Before-Methoden in der Superklasse
- Führen Sie die @Before-Methoden in dieser Klasse aus
- Führen Sie in dieser Klasse eine @Test-Methode aus
- Führen Sie die @After-Methoden in dieser Klasse aus
- Führen Sie die @After-Methoden in der Oberklasse aus
JUnit Anmerkung für 5: Diese Anmerkungen sind JUnit 4 (org.junit). JUnit 5 benannten sie um in org.junit.jupiter.apiund die JUnit Der unten stehende Code 4 läuft immer noch unter dem alten Motor.
| JUnit 4 Anmerkungen | JUnit 5 (Jupiter) Äquivalent | Läuft |
|---|---|---|
| @Vor | @BeforeEach | Vor jeder Testmethode |
| @Nach dem | @Nach jedem | Nach jeder Testmethode |
| @Vor dem Unterricht | @Vor allen | Einmal vor der ganzen Klasse |
| @Nach dem Unterricht | @Schließlich | Sobald die ganze Klasse |
| @Ignorieren | @Behindert | Überspringt den annotierten Test |
Beispiel: Erstellen einer Klasse mit einer Datei als Testumgebung
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
Im obigen Beispiel ergibt sich folgende Ausführungskette. Das Diagramm traces gibt einen Erstellungs-Test-Lösch-Zyklus pro Testmethode.
- createOutputFile()
- testFile1()
- deleteOutputFile()
- createOutputFile()
- testFile2()
- deleteOutputFile()
Annahme:
testFile1() wird vor testFile2() ausgeführt, was nicht garantiert ist.
Einmalige Einrichtung
- Es ist möglich, eine Methode nur einmal für die gesamte Testklasse auszuführen, bevor einer der Tests ausgeführt wird, und zwar vor jedem anderen @Vor Methode(n).
- Die einmalige Einrichtung ist nützlich zum Starten von Servern, Herstellen von Verbindungen und ähnlichen Aufgaben. Es ist zeitaufwändig, Ressourcen für jeden Test zu schließen und wieder zu öffnen.
- Dies kann mithilfe der Annotation erfolgen @Vor dem Unterricht in JUnit.
@BeforeClass public static void Method_Name() { // class setup code here }
Die Methode muss sein öffentliche statische LeereDa JUnit wird aufgerufen, bevor irgendeine Testinstanz existiert.
Einmaliger Abriss
- Ähnlich wie bei der einmaligen Einrichtung steht auch eine einmalige Bereinigungsmethode zur Verfügung. Sie wird nach allen Testfallmethoden ausgeführt. @Nach dem Anmerkungen wurden ausgeführt.
- Es ist nützlich zum Anhaltenping Server und Schließung von Kommunikationsverbindungen.
- Dies kann mit Hilfe der @Nach dem Unterricht Anmerkung.
@AfterClass public static void Method_Name() { // class cleanup code here }
JUnit Testsuiten
Sobald die Testumgebung eingerichtet ist, werden zusammengehörige Testklassen in der Regel gruppiert und gemeinsam gestartet.
Wenn wir mehrere Tests in einer bestimmten Reihenfolge ausführen möchten, können wir dies erreichen, indem wir alle Tests an einem Ort zusammenfassen. Dieser Ort wird als Testsuite bezeichnet. Weitere Details zur Ausführung von Testsuiten und deren Verwendung finden Sie in [Link einfügen]. JUnit werden in diesem Abschnitt behandelt Lernprogramm.
JUnit Testläufer
JUnit stellt ein Tool zur Ausführung Ihrer Testfälle bereit.
- JUnitCore Die Klasse wird zum Ausführen dieser Tests verwendet.
- Eine Methode namens runClasses Zur Verfügung gestellt von org.junit.runner.JUnitCore wird verwendet, um eine oder mehrere Testklassen auszuführen.
- Der Rückgabetyp dieser Methode ist der Lösung Objekt (org.junit.runner.Ergebnis), die zum Abrufen von Informationen über die Tests verwendet wird. Das folgende Codebeispiel verdeutlicht dies.
public class Test { public static void main(String[] args) { Result result = JUnitCore.runClasses(CreateAndSetName.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Im obigen Code wird das „result“-Objekt verarbeitet, um die erfolgreichen und fehlgeschlagenen Ergebnisse der ausgeführten Testfälle zu ermitteln. Hilfsfunktionen wie … behauptenGleich diese Fehler ansprechen, während @Ignorieren überspringt einen Test.
JUnit Anmerkung für 5: JUnitCore ist das JUnit 4 Runner. JUnit 5 ersetzt es durch das JUnit Plattform Launcher API, normalerweise von der IDE gestartet, Gradle oder Maven Surefire.
Vorname JUnit Programm
Gute Kenntnisse des Softwareentwicklungszyklus (SDLC), Java Programmierung und die Grundlagen der Softwaretest Der Prozess hilft dabei, ein Verständnis zu entwickeln JUnit Programm, ebenso wie das Wissen, wie Komponententests unterscheiden sich von Integrationstests.
Lassen Sie uns Unit-Tests anhand eines praktischen Beispiels verstehen. Wir müssen eine Testklasse mit einer Testmethode erstellen, die mit folgender Annotation versehen ist: @Prüfung wie unten angegeben:
MyFirstClassTest.java
package guru99.JUnit; import static org.junit.Assert.*; import org.junit.Test; public class MyFirstClassTest { @Test public void myFirstMethod(){ String str= "JUnit is working fine"; assertEquals("JUnit is working fine",str); } }
TestRunner.java
Um unsere Testmethode (siehe oben) auszuführen, müssen wir einen Test-Runner erstellen. Im Test-Runner müssen wir die Testklasse als Parameter hinzufügen. JUnitDie Methode `runClasses()` von Core gibt das Testergebnis zurück, je nachdem, ob der Test bestanden oder fehlgeschlagen ist.
Weitere Details hierzu finden Sie im 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(MyFirstClassTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Ausgang
Sobald TestRunner.java Wenn wir unsere Testmethoden ausführen, erhalten wir die Ausgabe „fehlgeschlagen“ oder „bestanden“. Die Erklärung der Ausgabe finden Sie unten:
- In diesem Beispiel nach der Ausführung MyFirstClassTest.javaDer Test wurde bestanden und das Ergebnis ist grün.
- Wäre es fehlgeschlagen, hätte es das Ergebnis rot angezeigt, und der Fehler ist im Fehlerbericht zu erkennen. trace. Siehe die JUnit GUI unten:


