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. |
