Was sind JUnit-Anmerkungen?
JUNIT ANNOTATIONS ist eine spezielle Form syntaktischer Metadaten, die dem Java-Quellcode hinzugefügt werden können, um die Lesbarkeit und Struktur des Codes zu verbessern. Variablen, Parameter, Pakete, Methoden und Klassen können mit Anmerkungen versehen werden. In Junit4 wurden Anmerkungen eingeführt, die Java-Code lesbarer und einfacher machen. Dies ist der große Unterschied zwischen Junit3 und Junit4, dass Junit4 auf Anmerkungen basiert.
Mit dem Wissen über Anmerkungen in Junit5 kann man leicht einen JUnit-Test lernen und implementieren. Nachfolgend finden Sie eine Liste wichtiger und häufig verwendeter Anmerkungen:
S.No. | Anmerkungen | Beschreibung |
---|---|---|
1. | @Prüfung | Diese Annotation ersetzt org.junit.TestCase und gibt an, dass die öffentliche Void-Methode, an die sie angehängt ist, als Testfall ausgeführt werden kann. |
2. | @Vor | Diese Anmerkung wird verwendet, wenn Sie vor jedem Testfall eine Anweisung ausführen möchten, z. B. Vorbedingungen. |
3. | @Vor dem Unterricht | Diese Annotation wird verwendet, wenn Sie einige Anweisungen ausführen möchten, bevor alle Testfälle ausgeführt wurden, z. B. muss die Testverbindung vor allen Testfällen ausgeführt werden. |
4. | @Nach dem | Diese Anmerkung kann verwendet werden, wenn Sie nach jedem Testfall einige Anweisungen ausführen möchten, z. B. zum Zurücksetzen von Variablen, Löschen temporärer Dateien, Variablen usw. |
5. | @Nach dem Unterricht | Diese Annotation kann verwendet werden, wenn Sie nach allen Testfällen einige Anweisungen ausführen möchten, z. B. Ressourcen freigeben, nachdem alle Testfälle ausgeführt wurden. |
6. | @ Ignors | Diese Anmerkung kann verwendet werden, wenn Sie einige Anweisungen während der Testausführung ignorieren möchten, um beispielsweise einige Testfälle während der Testausführung zu deaktivieren. |
7. | @ Test (Zeitüberschreitung = 500) | Diese Anmerkung kann verwendet werden, wenn Sie während der Testausführung eine Zeitüberschreitung festlegen möchten, z. B. wenn Sie unter einem SLA (Service Level Agreement) arbeiten und die Tests innerhalb einer bestimmten Zeit abgeschlossen sein müssen. |
8. | @Test (erwartet = IllegalArgumentException.class) | Diese Anmerkung kann verwendet werden, wenn Sie während der Testausführung eine Ausnahme behandeln möchten. Zum Beispiel, wenn Sie überprüfen möchten, ob eine bestimmte Methode eine bestimmte Ausnahme auslöst oder nicht. |
In diesem Tutorial lernen Sie:
- Beispiel für JUnit-Anmerkungen
- JUnit Assert Class
- JUnit Test Cases Class
- JUnit TestResult-Klasse
- JUnit Test Suite-Klasse
Beispiel für JUnit-Anmerkungen
Erstellen wir eine Klasse, die wichtige JUnit-Annotationen mit einfachen print-Anweisungen abdeckt, und führen Sie sie mit einer Test-Runner-Klasse aus:
Schritt 1) Betrachten Sie die folgende Java-Klasse mit verschiedenen Methoden, die an die oben aufgeführten Anmerkungen angehängt sind:
JunitAnnotationsExample.java
Paket guru99.junit;statische org.junit.Assert.assertEquals importieren;statische org.junit.Assert.assertFalse importieren;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;öffentliche Klasse JunitAnnotationsExample {private ArrayList-Liste;@Vor dem Unterrichtöffentliche statische Leere m1 () {System.out.println ("Mit @BeforeClass vor allen Testfällen ausgeführt");}}@Vorpublic void m2 () {list = new ArrayList ();System.out.println ("Verwenden von @ Before-Annotationen, die vor jedem Testfall ausgeführt werden");}}@Nach dem Unterrichtöffentliche statische Leere m3 () {System.out.println ("Mit @AfterClass nach allen Testfällen ausgeführt");}}@Nach dempublic void m4 () {list.clear ();System.out.println ("Mit @After nach jedem Testfall ausgeführt");}}@Prüfungpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}}@Ignorierenpublic void m6 () {System.out.println ("Bei Verwendung von @Ignore wird diese Ausführung ignoriert");}}@ Test (Zeitüberschreitung = 10)public void m7 () {System.out.println ("Mit @Test (Timeout) kann das Timeout im JUnit4-Testfall erzwungen werden");}}@Test (erwartet = NoSuchMethodException.class)public void m8 () {System.out.println ("Mit @Test (erwartet) wird während der Ausführung nach einer bestimmten Ausnahme gesucht");}}}}
Schritt 2) Lassen Sie uns eine Testläufer-Klasse erstellen, um den obigen Test auszuführen:
TestRunner.java
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 (JunitAnnotationsExample.class);for (Fehler Fehler: result.getFailures ()) {System.out.println (fail.toString ());}}System.out.println ("Result ==" + result.wasSuccessful ());}}}}
erwartetes Ergebnis
- Alle Testfälle werden einzeln ausgeführt, und alle Druckanweisungen können auf einer Konsole angezeigt werden.
- Wie in der obigen Tabelle @Before erläutert, wird @BeforeClass [Methode m1 () und m2 ()] vor jedem bzw. vor allen Testfällen ausgeführt.
- Auf die gleiche Weise wird @ after, @ afterClass (Methode m3 () und m4 ()) nach jedem bzw. nach allen Testfällen ausgeführt. @ignore (Methode m6 ()) wird so behandelt, als würde der Test ignoriert.
Lassen Sie uns die in der obigen Java-Klasse verwendeten Testfälle im Detail analysieren:
- Betrachten Sie die unten angegebene Methode m5 ():
@Prüfungpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}}
In der obigen Methode fügen Sie also eine Zeichenfolge in die Variable "Liste" ein
- list.isEmpty () gibt false zurück.
- assertFalse (list.isEmpty ()) muss true zurückgeben.
- Als Ergebnis wird der Testfall passieren .
Da Sie der Liste nur eine Zeichenfolge hinzugefügt haben, ist die Größe eins.
- list.size () muss den int-Wert als "1" zurückgeben.
- So assertEquals (1, list.size ()) müssen true zurück.
- Als Ergebnis wird der Testfall passieren .
- Betrachten Sie die unten angegebene Methode m7 ():
@ Test (Zeitüberschreitung = 10)public void m7 () {System.out.println ("Mit @Test (Timeout) kann das Timeout im JUnit4-Testfall erzwungen werden");}}
Wie oben erläutert, wird die Annotation @Test (Timeout = 10) verwendet, um das Timeout im Testfall zu erzwingen.
- Betrachten Sie die unten angegebene Methode m8 ():
@Test (erwartet = NoSuchMethodException.class)public void m8 () {System.out.println ("Mit @Test (erwartet) wird während der Ausführung nach einer bestimmten Ausnahme gesucht");}}
Wie oben erläutert , prüft @Test (erwartet) während seiner Ausführung, ob eine bestimmte Ausnahme vorliegt, sodass die Methode m8 () "Keine solche Methodenausnahme" auslöst. Infolgedessen wird der Test mit einer Ausnahme ausgeführt.
Da alle Testfälle bestanden sind, führt dies zu einer erfolgreichen Testausführung.
Tatsächliche Ergebnis
Da es im obigen Beispiel drei Testfälle gibt, werden alle Testfälle einzeln ausgeführt. Siehe Ausgabe unten :
Siehe unten Druckanweisungen, die auf der Konsole angezeigt werden:
Mit @BeforeClass vor allen Testfällen ausgeführt
Verwenden von @Before-Annotationen, die vor jedem Testfall ausgeführt werden
Mit @After nach jedem Testfall ausgeführt
Verwenden von @Before-Annotationen, die vor jedem Testfall ausgeführt werden
Mit @Test (Timeout) kann das Timeout im JUnit4-Testfall erzwungen werden
Mit @After nach jedem Testfall ausgeführt
Verwenden von @Before-Annotationen, die vor jedem Testfall ausgeführt werden
Mit @Test (erwartet) wird während der Ausführung nach einer bestimmten Ausnahme gesucht
Mit @After nach jedem Testfall ausgeführt
Mit @AfterClass, ausgeführt nach allen Testfällen
JUnit Assert Class
Diese Klasse bietet eine Reihe von Assertionsmethoden, die beim Schreiben eines Testfalls hilfreich sind. Wenn alle Assert-Anweisungen bestanden sind, sind die Testergebnisse erfolgreich. Wenn eine Assert-Anweisung fehlschlägt, sind die Testergebnisse fehlgeschlagen.
Wie Sie bereits gesehen haben, beschreibt die folgende Tabelle wichtige Assert-Methoden und eine Beschreibung:
S.No. | Methode | Beschreibung |
---|---|---|
1. | void assertEquals (Boolescher Wert erwartet, Boolescher Wert tatsächlich) | Es wird geprüft, ob zwei Werte gleich der Methode equals der Object-Klasse sind |
2. | void assertFalse (boolesche Bedingung) | Die Funktionalität besteht darin, zu überprüfen, ob eine Bedingung falsch ist. |
3. | void assertNotNull (Objektobjekt) | Mit der Funktion "assertNotNull" wird überprüft, ob ein Objekt nicht null ist. |
4. | void assertNull (Objektobjekt) | Mit der Funktion "assertNull" wird überprüft, ob ein Objekt null ist. |
5. | void assertTrue (boolesche Bedingung) | Mit der Funktion "assertTrue" wird überprüft, ob eine Bedingung erfüllt ist. |
6. | void fail () | Wenn Sie einen Assertionsfehler auslösen möchten, haben Sie fail (), was immer zu einem Fehlurteil führt. |
7. | void assertSame ([String message] | Mit der Funktion "assertSame" wird überprüft, ob sich die beiden Objekte auf dasselbe Objekt beziehen. |
8. | void assertNotSame ([String message] | Mit der Funktion "assertNotSame" wird überprüft, ob sich die beiden Objekte nicht auf dasselbe Objekt beziehen. |
JUnit Test Cases Class
Um mehrere Tests auszuführen, ist die TestCase-Klasse in org.junit.TestCase- Paketen verfügbar . Annotation @Test teilt JUnit mit, dass diese öffentliche Void-Methode (Testfall hier), an die sie angehängt ist, als Testfall ausgeführt werden kann.
Die folgende Tabelle zeigt einige wichtige Methoden, die in der Klasse org.junit.TestCase verfügbar sind :
S.No. | Methode | Beschreibung |
---|---|---|
1. | int countTestCases () | Diese Methode wird verwendet, um zu zählen, wie viele Testfälle von der Methode run (TestResult tr) ausgeführt wurden . |
2. | TestResult createResult () | Diese Methode wird verwendet, um ein TestResult- Objekt zu erstellen . |
3. | String getName () | Diese Methode gibt eine Zeichenfolge zurück, die nichts anderes als ein TestCase ist . |
4. | TestResult run () | Diese Methode wird verwendet, um einen Test auszuführen, der ein TestResult- Objekt zurückgibt |
5. | void run (TestResult-Ergebnis) | Diese Methode wird verwendet, um einen Test mit einem TestResult- Objekt auszuführen, das nichts zurückgibt. |
6. | void setName (String name) | Diese Methode wird verwendet, um einen Namen für einen TestCase festzulegen. |
7. | void setUp () | Diese Methode wird zum Schreiben von Ressourcenzuordnungscode verwendet. Beispiel: Erstellen Sie eine Datenbankverbindung. |
8. | void tearDown () | Diese Methode wird zum Schreiben von Ressourcenfreigabecode verwendet. z. B. Datenbankverbindung nach Durchführung der Transaktionsoperation freigeben. |
JUnit TestResult-Klasse
Wenn Sie einen Test ausführen, wird ein Ergebnis zurückgegeben (in Form eines TestResult- Objekts). Dieses TestResult-Objekt kann verwendet werden, um das resultierende Objekt zu analysieren. Dieses Testergebnis kann entweder fehlgeschlagen oder erfolgreich sein. In der folgenden Tabelle finden Sie wichtige Methoden, die in der Klasse org.junit.TestResult verwendet werden:S.No. | Methode | 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 der Fehlerliste einen Fehler hinzufügen möchten. |
3. | void endTest (Test test) | Diese Methode wird verwendet, um zu benachrichtigen, dass ein Test durchgeführt (abgeschlossen) wird. |
4. | int errorCount () | Diese Methode wird verwendet, um den Fehler während der Testausführung zu erkennen. |
5. | Aufzählung | Diese Methode gibt einfach eine Sammlung (Aufzählung hier) von Fehlern zurück. |
6. | int failCount () | Diese Methode wird verwendet, um die Anzahl der Fehler zu ermitteln, die während der Testausführung erkannt wurden. |
7. | void run (TestCase-Test) | Diese Methode wird verwendet, um einen Testfall auszuführen. |
8. | int runCount () | Diese Methode zählt einfach den ausgeführten Test. |
9. | void startTest (Test test) | Diese Methode wird verwendet, um zu benachrichtigen, dass ein Test gestartet wird. |
10. | void stop () | Diese Methode wird verwendet, um den zu stoppenden Testlauf durchzuführen. |
JUnit Test Suite-Klasse
Wenn Sie mehrere Tests in einer bestimmten Reihenfolge ausführen möchten, können Sie alle Tests an einem Ort kombinieren. Dieser Ort wird als Testsuite bezeichnet.
In der folgenden Tabelle finden Sie wichtige Methoden für die Klasse org.junit.TestSuite :
S.No. | Methode | Beschreibung |
---|---|---|
1. | void addTest (Test test) | Diese Methode wird verwendet, wenn Sie der Suite einen Test hinzufügen möchten. |
2. | void addTestSuite (Klasse erweitert TestCase> 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 () | Diese Methode wird verwendet, um den Namen der Testsuite abzurufen. |
5. | void run (TestResult-Ergebnis) | Diese Methode wird verwendet, um einen Test auszuführen und das Testergebnis im TestResult- Objekt zu erfassen . |
6. | void setName (String name) | Mit dieser Methode wird der Name von TestSuite festgelegt . |
7. | Test testAt (int index) | Diese Methode wird verwendet, wenn Sie den Test bei einem bestimmten Index zurückgeben möchten. |
8. | int testCount () | Diese Methode wird verwendet, wenn Sie eine Reihe von Tests in der Suite zurückgeben möchten. |
9. | statische Testwarnung (String message) | Diese Methode gibt einen fehlgeschlagenen Test zurück und protokolliert eine Warnmeldung. |
Zusammenfassung:
- JUnit bietet eine portable API, die alle wichtigen Klassen und Anmerkungen enthält, die beim Schreiben eines Komponententests hilfreich sind.
- Klassen, die beim Schreiben eines Testfalls sehr nützlich sind
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Liste wichtiger und häufig verwendeter Anmerkungen
@Vor
@Vor dem Unterricht
@Nach dem
@Nach dem Unterricht
@Prüfung
@Ignorieren