Wenn Sie eine Unit-Test-Suite schreiben, gibt es möglicherweise einige nicht testbezogene Aktivitäten, die Sie ausführen müssen. Diese Aktivitäten können jede Form annehmen. Möglicherweise müssen Sie eine Verbindung zu einer Datenbank herstellen oder Ressourcen sammeln, bevor Sie einen Test durchführen. Nach der Ausführung jedes Testfalls müssen Sie möglicherweise einige Ressourcen freigeben.
Die Durchführung einer dieser nicht testbezogenen Aktivitäten außerhalb des Rahmens einer Unit-Test-Klasse kann mühsam, wenn nicht gar unmöglich sein. Die erfolgreiche Ausführung Ihrer Testklasse kann von diesen Aktivitäten abhängen, daher stellt JUnit zwei Anmerkungspaare bereit, um dieses Problem anzugehen.
Die @BeforeAll-Anmerkung
Eine JUnit-Testklasse kann eine oder mehrere Testmethoden haben. Die Annotation @BeforeAll signalisiert, dass eine bestimmte Methode vor allen Testmethoden in einer Testklasse ausgeführt werden soll. Die dieser Anmerkung zugeordnete Methode wird nur einmal ausgeführt (zu Beginn des Tests), unabhängig von der Anzahl der Testmethoden in der Testklasse.
Jede Methode, die die Annotation @BeforeAll verwendet, muss einige Bedingungen erfüllen. Diese Methoden müssen einen void-Rückgabetyp haben, müssen öffentlich sein und dürfen nicht privat sein. Die Annotation @BeforeAll ist ideal, um a Verbindung zu einer Datenbank oder eine neue Datei erstellen. In diesem Artikel wird anhand einer Taschenrechner-Testklasse gezeigt, wie Sie die Annotation @BeforeAll verwenden können.
Die Rechnerklasse
Paket com.app;
ÖffentlichkeitKlasseTaschenrechner{
Öffentlichkeitstatischinthinzufügen(int Nummer1, int num2){
Rückkehr num1 + num2;
}
Öffentlichkeitstatischintsubtrahieren(int Nummer1, int num2){
Rückkehr num1 - num2;
}
Öffentlichkeitstatischintmultiplizieren(int Nummer1, int num2){
Rückkehr num1 * num2;
}
Öffentlichkeitstatischintteilen(int Nummer1, int num2){
Rückkehr num1 / num2;
}
}
Die CalculatorTest-Klasse
importierenstatischorg.junit.Jupiter.api.Behauptungen.*;
importierenorg.junit.Jupiter.api.Vor allen;
importierenorg.junit.Jupiter.api.Prüfen;
importierenorg.junit.Jupiter.api.Anzeigename;@DisplayName("Testklasse, die zeigt, wie es geht verwenden das Vorundnach Anmerkungen.")
KlasseRechnerTest{
@Vor allen
ÖffentlichkeitstatischLeerepowerOnCalculator(){
System.out.println("Der Rechner ist eingeschaltet");
}@Prüfen
@Anzeigename("Testmethode, die zwei ganzzahlige Werte addiert.")
ÖffentlichkeitLeeretestHinzufügen(){
behauptenGleich(7, Taschenrechner.hinzufügen(3, 4));
}@Prüfen
@Anzeigename("Testmethode, die einen ganzzahligen Wert von einem anderen subtrahiert.")
ÖffentlichkeitLeeretestSubtrahieren(){
behauptenGleich(6, Taschenrechner.subtrahieren(9, 3));
}@Prüfen
@Anzeigename("Testmethode, die zwei ganzzahlige Werte multipliziert")
ÖffentlichkeitLeeretestMultiplizieren(){
behauptenGleich(10, Taschenrechner.multiplizieren(5, 2));
}
@Prüfen
@Anzeigename("Testmethode, die einen ganzzahligen Wert durch einen anderen dividiert")
ÖffentlichkeitLeeretestTeilen(){
behauptenGleich(2, Taschenrechner.teilen(4, 2));
}
}
In dieser Klasse arbeitet die Annotation @BeforeAll mit der Methode powerOnCalculator(), die vor jedem Testlauf „Der Taschenrechner ist eingeschaltet“ ausgibt. Die erfolgreiche Testausführung druckt den folgenden Testbericht:
Wie Sie sehen können, erscheint die mit der Annotation @BeforeAll verknüpfte Methode nicht im Testbericht. Wenn es jedoch einen Fehler in der Annotationsmethode @BeforeAll gibt, wird dies in den Ergebnissen des Testberichts mit einem Fehler angezeigt.
Die @BeforeEach-Anmerkung
Wie die mit @BeforeAll kommentierte Methode erscheint die mit @BeforeEach kommentierte Methode nicht im Testbericht. Die mit @BeforeEach kommentierte Methode wird vor jeder Testmethode in einer Testklasse ausgeführt. Wenn also eine Testklasse zwei Testmethoden enthält, wird die Annotation @BeforeEach zweimal ausgeführt.
importierenstatischorg.junit.Jupiter.api.Behauptungen.*;
importierenorg.junit.Jupiter.api.Vor allen;
importierenorg.junit.Jupiter.api.Vor jedem;
importierenorg.junit.Jupiter.api.Prüfen;
@DisplayName("Testklasse, die zeigt, wie es geht verwenden das Vorundnach Anmerkungen.")
KlasseRechnerTest{
@Vor allen
ÖffentlichkeitstatischLeerepowerOnCalculator(){
System.out.println("Der Rechner ist eingeschaltet");
}
@BeforeEach
ÖffentlichkeitLeereklarRechner(){
System.out.println("Der Rechner ist fertig");
}
@Prüfen
@Anzeigename("Testmethode, die zwei ganzzahlige Werte addiert.")
ÖffentlichkeitLeeretestHinzufügen(){
behauptenGleich(7, Taschenrechner.hinzufügen(3, 4));
}
@Prüfen
@Anzeigename("Testmethode, die einen ganzzahligen Wert von einem anderen subtrahiert.")
ÖffentlichkeitLeeretestSubtrahieren(){
behauptenGleich(6, Taschenrechner.subtrahieren(9, 3));
}
@Prüfen
@Anzeigename("Testmethode, die zwei ganzzahlige Werte multipliziert")
ÖffentlichkeitLeeretestMultiplizieren(){
behauptenGleich(10, Taschenrechner.multiplizieren(5, 2));
}
@Prüfen
@Anzeigename("Testmethode, die einen ganzzahligen Wert durch einen anderen dividiert")
ÖffentlichkeitLeeretestTeilen(){
behauptenGleich(2, Taschenrechner.teilen(4, 2));
}
}
Das Hinzufügen der Annotation @BeforeEach zur Klasse CalculatorTest erzeugt die folgende Ausgabe:
Die mit der Annotation @BeforeEach verknüpfte Methode wird viermal ausgeführt, einmal vor jeder Testmethode. Beachten Sie, dass die @BeforeEach-Methode nicht statisch ist, einen void-Rückgabetyp hat und nicht privat ist, da dies obligatorische Bestimmungen sind. Es ist auch wichtig zu beachten, dass die mit der @BeforeEach-Annotation verknüpfte Methode nach der @BeforeAll-Methode ausgeführt wird.
Die @AfterAll-Anmerkung
Eine Methode mit der Annotation @AfterAll wird ausgeführt, nachdem alle Testmethoden in der Testklasse ihre Ausführung abgeschlossen haben. Die Annotation @AfterAll ist ideal für grundlegende Dateioperationen, wie das Schließen einer Datei oder das Trennen der Verbindung zu einer Datenbank. Die Annotation @AfterAll ist das Gegenstück zur Annotation @BeforeAll. Wie die Annotation @BeforeAll muss die Annotation @AfterAll statisch sein, void zurückgeben und darf nicht privat sein.
@Schließlich
ÖffentlichkeitstatischLeerepowerOffRechner(){
System.out.println("Der Taschenrechner ist aus");
}
Das Hinzufügen der @AfterAll-annotierten Methode zur vorhandenen CalculatorTest-Klasse gibt die folgende Ausgabe auf der Konsole aus:
Beachten Sie, dass die Methode powerOffCalculator(), die die Annotation @AfterAll verwendet, am Ende der Testklasse gedruckt wird, nachdem alle Testmethoden ausgeführt wurden.
Die @AfterEach-Anmerkung
Die Annotation @AfterEach ist das Gegenstück zur Annotation @BeforeEach. Sie haben die gleichen zwingenden Bestimmungen, die sich geringfügig von denen der Annotationen @BeforeAll und @AfterAll unterscheiden. Was die @AfterEach-Annotation von der @BeforeEach-Annotation (abgesehen von ihren Namen) unterscheidet, ist, dass die @AfterEach-Methode nach jeder Testmethode ausgeführt wird.
@Nach jedem
ÖffentlichkeitLeerezurückErgebnisse(){
System.out.println("Die Ergebnisse sind fertig");
}
Das Ausführen der Klasse CalculatorTest gibt die folgende Ausgabe auf der Konsole aus:
Die Ausgabe zeigt, dass die mit der Annotation @AfterEach (returnResults) verknüpfte Methode viermal gedruckt wird. Jede Ausführung der Methode returnResults() erfolgt erst nach der Ausführung jedes Komponententests. Dies wird durch die Tatsache deutlich, dass die Ausgabe der Methode returnResults() nach jeder Ausgabe der Methode erscheint, die der Annotation @BeforeEach zugeordnet ist.
Polieren Sie Ihre Testsuiten mit Anmerkungen auf
JUnit ermöglicht es Ihnen, nicht testbezogene Prozesse mit den Vorher- und Nachher-Paar-Annotationen zu handhaben. Diese vier Anmerkungen gehören zu einer Liste mehrerer anderer Anmerkungen, die Ihren Tests einen Mehrwert verleihen. Eine weitere Anmerkung von JUnit ist @DisplayName.
Die beiden Codebeispiele, die die vollständige CalculatorTest-Klasse anzeigen, verwenden die Annotation @DisplayName. Die Annotation @DisplayName hilft Ihnen, aussagekräftigere Namen für Ihre Testklassen und Testmethoden zu erstellen.