JUnit Anmerkungs-Tutorial mit Beispiel: Was ist @Test und @After?
⚡ Intelligente Zusammenfassung
JUnit Annotationen sind eine Form von syntaktischen Metadaten, die hinzugefügt werden Java Quellcode, damit der Test-Runner weiß, welche Methoden wann ausgeführt werden sollen und wie lange die einzelnen Methoden dauern dürfen.
Was ist JUnit Anmerkungen?
JUnit Anmerkungen sind eine spezielle Form von syntaktischen Metadaten, die hinzugefügt werden können Java Quellcode für bessere Lesbarkeit und Strukturierung des Codes. Variablen, Parameter, Pakete, Methoden und Klassen können annotiert werden. Annotationen wurden eingeführt in JUnit 4, was ergibt Java Der Code ist lesbarer und einfacher. Das ist der große Unterschied zwischen JUnit 3 und JUnit 4: JUnit 4 basiert auf Annotationen.
Mit praktischen Kenntnissen dieser Annotationen kann man leicht lernen und implementieren JUnit prüfen. Nachfolgend finden Sie die wichtigsten und häufig verwendeten JUnit Liste der Anmerkungen, mit der JUnit 5 (Jupiter) Äquivalente neben jedem:
| S.No. | Anmerkungen | Beschreibung | JUnit 5 Äquivalent |
|---|---|---|---|
| 1. | @Prüfung | Diese Annotation ersetzt junit.framework.TestCase und gibt an, dass die öffentliche void-Methode, an die sie angehängt ist, als Testfall ausgeführt werden kann. | @Test (org.junit.jupiter.api) |
| 2. | @Vor | Diese Annotation wird verwendet, wenn Sie vor jedem Testfall eine Anweisung wie Vorbedingungen ausführen möchten. | @BeforeEach |
| 3. | @Vor dem Unterricht | Diese Annotation wird verwendet, wenn Sie bestimmte Anweisungen vor allen Testfällen ausführen möchten, beispielsweise eine Testverbindung, die vor allen Testfällen geöffnet werden muss. | @Vor allen |
| 4. | @Nach dem | Diese Annotation kann verwendet werden, wenn Sie nach jeder Anweisung einige Anweisungen ausführen möchten Testfallzum Beispiel das Zurücksetzen von Variablen oder das Löschen temporärer Dateien. | @Nach jedem |
| 5. | @Nach dem Unterricht | Diese Annotation kann verwendet werden, wenn Sie nach Abschluss aller Testfälle bestimmte Anweisungen ausführen möchten, beispielsweise Ressourcen freigeben, nachdem alle Testfälle ausgeführt wurden. | @Schließlich |
| 6. | @Ignorieren | Diese Annotation kann verwendet werden, wenn Sie bestimmte Anweisungen während der Testausführung ignorieren möchten, beispielsweise um bestimmte Testfälle während der Testausführung zu deaktivieren. | @Behindert |
| 7. | @Test(timeout=500) | Diese Annotation kann verwendet werden, wenn Sie während der Testausführung ein Timeout festlegen möchten, beispielsweise wenn Sie im Rahmen einer SLA (Service Level Agreement) arbeiten und die Tests innerhalb einer bestimmten Zeit abgeschlossen sein müssen. | @Timeout oder assertTimeout |
| 8. | @Test(expected=IllegalArgumentException.class) | Diese Annotation kann verwendet werden, um Ausnahmen während der Testausführung abzufangen. Beispielsweise, um zu prüfen, ob eine bestimmte Methode eine bestimmte Ausnahme auslöst. | assertThrows |
JUnit Beispiel für Anmerkungen
Lassen Sie uns eine Klasse erstellen, die wichtige Themen abdeckt JUnit Annotationen mit einfachen print-Anweisungen erstellen und mit einer Test-Runner-Klasse ausführen:
Schritt 1) Betrachten Sie Folgendes: Java Klasse mit verschiedenen Methoden, die den oben aufgeführten Annotationen zugeordnet sind:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Schritt 2) Erstellen wir eine Test-Runner-Klasse, um den obigen Test auszuführen:
TestRunner.java
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(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
erwartetes Ergebnis
- Alle Testfälle werden nacheinander ausgeführt, und alle Ausgaben können auf einer Konsole angezeigt werden.
- Wie in der obigen Tabelle erläutert, @Before und @BeforeClass in JUnit Die Methoden m2() und m1() werden vor jedem Testfall bzw. vor allen Testfällen ausgeführt.
- Genauso wie @After und @AfterClass in JUnit Die Methoden m4() und m3() werden nach jedem bzw. allen Testfällen ausgeführt. Die Annotation @Ignore (Methode m6()) bewirkt, dass der Test ignoriert wird.
Lassen Sie uns die oben verwendeten Testfälle analysieren. Java Klasse im Detail:
- Betrachten Sie die unten angegebene Methode m5():
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
Bei der oben beschriebenen Methode fügen Sie der Variablen „list“ eine Zeichenkette hinzu:
- Liste ist leer() wird false zurückgeben.
- behauptenFalse(list.isEmpty()) muss true zurückgeben.
- Infolgedessen wird der Testfall passieren.
Da Sie der Liste nur eine Zeichenkette hinzugefügt haben, beträgt die Größe eins.
- list.size() muss den Integer-Wert „1“ zurückgeben.
- So behauptenEquals(1, list.size()) muss true zurückgeben.
- Infolgedessen wird der Testfall passieren.
- Betrachten Sie die unten angegebene Methode m7():
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Wie oben besprochen, @Test(timeout = 10) Dient dazu, ein Timeout im Testfall zu erzwingen. Der Wert wird in Millisekunden angegeben, daher muss m7() innerhalb von 10 ms abgeschlossen sein.
- Betrachten Sie die unten angegebene Methode m8():
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Wie oben besprochen, @Test(erwartet) Die Methode prüft während ihrer Ausführung auf die angegebene Ausnahme, daher löst die Methode m8() eine „No Such Method Exception“ aus. Folglich wird der Test mit einer Ausnahme ausgeführt.
Genauigkeitshinweis: m8() gibt nur eine Zeile aus, daher wird die deklarierte Ausnahme nie tatsächlich ausgelöst und JUnit Fehler 4 meldet, dass der Test fehlgeschlagen ist. Gleichen Sie den erwarteten Typ mit dem tatsächlichen Fehlertyp der Methode ab. JUnit 5 schreibt dies mit assertThrows.
Da alle Testfälle bestanden sind, führt dies zu einer erfolgreichen Testausführung.
Tatsächliche Ergebnis
Da das obige Beispiel drei Testfälle enthält, werden alle Testfälle nacheinander ausgeführt. Siehe den folgenden Screenshot der Konsole:

Siehe folgende Druckanweisungen, die auf der Konsole angezeigt werden können:
Mit @BeforeClass vor allen Testfällen ausgeführt
Verwendung von @Before-Annotationen, die vor jedem Testfall ausgeführt werden
Mit @After nach jedem Testfall ausgeführt
Verwendung von @Before-Annotationen, die vor jedem Testfall ausgeführt werden
Mithilfe von @Test(timeout) kann eine Zeitüberschreitung erzwungen werden JUnit4 Testfall
Mit @After nach jedem Testfall ausgeführt
Verwendung von @Before-Annotationen, die vor jedem Testfall ausgeführt werden
Mit @Test(expected) wird während der Ausführung nach einer bestimmten Ausnahme gesucht
Mit @After nach jedem Testfall ausgeführt
Mit @AfterClass wird es nach allen Testfällen ausgeführt
JUnit Assert-Klasse
Die Annotationen legen fest, wann eine Methode ausgeführt wird; die Assert-Methoden entscheiden, ob sie erfolgreich ist.
Diese Klasse stellt eine Reihe von Assertionsmethoden bereit, die beim Schreiben von Testfällen hilfreich sind. Wenn alle Assertions erfolgreich sind, ist der Test erfolgreich. Schlägt eine Assertionsbedingung fehl, schlägt der Test fehl. JUnit behaupten Das Tutorial behandelt jede Methode ausführlich.
Wie Sie bereits gesehen haben, beschreibt die folgende Tabelle wichtige Assert-Methoden und deren Beschreibung:
| S.No. | Methodik | Beschreibung |
|---|---|---|
| 1. | void AssertEquals(boolescher Wert erwartet, boolescher Istwert) | Es prüft, ob zwei Werte gleich sind, ähnlich wie die equals-Methode der Object-Klasse. |
| 2. | void affirmFalse(boolesche Bedingung) | Die Funktionalität besteht darin zu prüfen, ob eine Bedingung nicht erfüllt ist. |
| 3. | voidassuertNotNull(Object object) | Mit der Funktion „assertNotNull“ wird überprüft, ob ein Objekt nicht null ist. |
| 4. | voidassuertNull(Object object) | Die Funktion „assertNull“ besteht darin, zu überprüfen, ob ein Objekt null ist. |
| 5. | voidassuertTrue(boolesche Bedingung) | Die Funktion „assertTrue“ besteht darin, zu überprüfen, ob eine Bedingung wahr ist. |
| 6. | void fail() | Wenn Sie einen Assertionsfehler auslösen möchten, führt fail() immer zu einem Fehlschlag. |
| 7. | void AssertSame([String-Nachricht] | Die Funktion „assertSame“ besteht darin, zu überprüfen, ob die beiden Objekte auf dasselbe Objekt verweisen. |
| 8. | void AssertNotSame([String-Nachricht] | Die Funktion „assertNotSame“ besteht darin, zu überprüfen, ob die beiden Objekte nicht auf dasselbe Objekt verweisen. |
JUnit Klasse „Testfälle“.
Um mehrere Tests auszuführen, steht die TestCase-Klasse zur Verfügung. JUnit-Framework Das Paket. Die @Test-Annotation besagt: JUnit dass diese öffentliche Methode (hier ein Testfall), an die sie angehängt ist, als Testfall ausgeführt werden kann.
Versionshinweis: Testfall, Testergebnis und TestSuite gehören zum Erbe JUnit-Framework Paket von JUnit 3. Sie werden weiterhin im JUnit 4.x-Artefakt ausgeliefert, aber annotationsbasierte Tests erweitern TestCase nicht.
Die folgende Tabelle zeigt einige wichtige Methoden, die in der junit.framework.TestCase Klasse:
| S.No. | Methodik | Beschreibung |
|---|---|---|
| 1. | int countTestCases() | Diese Methode dient dazu, zu zählen, wie viele Testfälle vom System ausgeführt werden. run(TestResult tr) Methode. |
| 2. | TestResult createResult() | Mit dieser Methode wird ein erstellt Testergebnis Objekt. |
| 3. | String getName () | Diese Methode gibt einen String zurück, der nichts anderes als ein ist Testfall Namen. |
| 4. | TestResult run() | Diese Methode dient zur Ausführung eines Tests, der ein Ergebnis zurückgibt. Testergebnis Objekt. |
| 5. | void run(TestResult-Ergebnis) | Diese Methode wird verwendet, um einen Test mit a auszuführen Testergebnis Objekt, das nichts zurückgibt. |
| 6. | void setName (String name) | Diese Methode wird verwendet, um den Namen eines Testfall. |
| 7. | void setUp() | Diese Methode wird verwendet, um Code zur Ressourcenzuordnung zu schreiben, beispielsweise zum Herstellen einer Datenbankverbindung. |
| 8. | void TearDown() | Diese Methode wird verwendet, um Code zur Ressourcenfreigabe zu schreiben, beispielsweise zum Freigeben einer Datenbankverbindung nach der Durchführung einer Transaktionsoperation. |
JUnit TestResult-Klasse
Wenn Sie einen Test ausführen, wird ein Ergebnis zurückgegeben (in Form eines Testergebnis Dieses TestResult-Objekt kann zur Analyse des resultierenden Objekts verwendet werden. Das Testergebnis kann entweder fehlschlagen oder erfolgreich sein.
Die folgende Tabelle enthält wichtige Methoden, die in der Klasse junit.framework.TestResult verwendet werden:
| S.No. | Methodik | Beschreibung |
|---|---|---|
| 1. | void addError(Test test, Throwable t) | Diese Methode wird verwendet, wenn Sie dem Test einen Fehler hinzufügen möchten. |
| 2. | void addFailure(Test test, AssertionFailedError t) | Diese Methode wird verwendet, wenn Sie einen Fehler zur Fehlerliste hinzufügen müssen. |
| 3. | void endTest(Testtest) | Mit dieser Methode wird mitgeteilt, dass ein Test durchgeführt (abgeschlossen) wurde. |
| 4. | int errorCount() | Mit dieser Methode lassen sich die während der Testausführung festgestellten Fehler ermitteln. |
| 5. | Aufzählung Fehler() | Diese Methode gibt einfach eine Sammlung (hier eine Aufzählung) von Fehlern zurück. |
| 6. | int failCount() | Mit dieser Methode wird die Anzahl der während der Testausführung festgestellten Fehler ermittelt. |
| 7. | Void-Lauf (TestCase-Test) | Mit dieser Methode wird ein Testfall ausgeführt. |
| 8. | int runCount() | Diese Methode zählt einfach die ausgeführten Tests. |
| 9. | void startTest(Testtest) | Diese Methode wird verwendet, um zu benachrichtigen, dass ein Test gestartet wurde. |
| 10 | void stop() | Diese Methode wird verwendet, um den Testlauf zu stoppen. |
JUnit Testsuite-Klasse
Wenn Sie mehrere Tests in einer bestimmten Reihenfolge ausführen möchten, können Sie dies erreichen, indem Sie alle Tests an einem Ort zusammenfassen. Dieser Ort wird als Testsuite bezeichnet. JUnit Testsuite Das Tutorial führt Sie durch ein vollständiges Beispiel.
Die folgenden Tabellen enthalten wichtige Methoden, die in der junit.framework.TestSuite Klasse:
| S.No. | Methodik | Beschreibung |
|---|---|---|
| 1. | void addTest(Testtest) | Diese Methode wird verwendet, wenn Sie der Suite einen Test hinzufügen möchten. |
| 2. | void addTestSuite(Class testClass) | Diese Methode wird verwendet, wenn Sie die Klasse angeben möchten, während Sie der Suite einen Test hinzufügen. |
| 3. | int countTestCases() | Diese Methode wird verwendet, wenn Sie die Anzahl der Testfälle zählen möchten. |
| 4. | String getName () | Mit dieser Methode wird der Name der Testsuite ermittelt. |
| 5. | void run(TestResult-Ergebnis) | Diese Methode dient dazu, einen Test durchzuführen und das Testergebnis in einem Testergebnis Objekt. |
| 6. | void setName (String name) | Diese Methode dient dazu, den Namen des TestSuite. |
| 7. | Test testAt(int index) | Diese Methode wird verwendet, wenn Sie den Test an einem bestimmten Index zurückgeben möchten. |
| 8. | int testCount() | Diese Methode wird verwendet, wenn Sie die Anzahl der Tests in der Testsuite zurückgeben möchten. |
| 9. | statische Testwarnung (String-Nachricht) | Diese Methode gibt einen Test zurück, der fehlschlägt und eine Warnmeldung protokolliert. |
