So verwenden Sie die @Before- und @After-Anmerkungen in JUnit

So verwenden Sie die @Before- und @After-Anmerkungen in JUnit

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.





Einige Elemente im Papierkorb können aufgrund des Systemintegritätsschutzes nicht gelöscht werden.
MAKEUSEOF VIDEO DES TAGES

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

package com.app; 
public class Calculator {
public static int add(int num1, int num2) {
return num1 + num2;
}
public static int subtract(int num1, int num2) {
return num1 - num2;
}
public static int multiply(int num1, int num2) {
return num1 * num2;
}
public static int divide(int num1, int num2) {
return num1 / num2;
}
}

Die CalculatorTest-Klasse

import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}

@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}

@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}

@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}

@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(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:



  BeforeAll-Anmerkungsbericht

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.





import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}
@BeforeEach
public void clearCalculator() {
System.out.println("The calculator is ready");
}
@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}
@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}
@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}
@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

Das Hinzufügen der Annotation @BeforeEach zur Klasse CalculatorTest erzeugt die folgende Ausgabe:

  BeforeEach-Anmerkungsausgabe

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.

Kostenlose Microsoft Office-Downloads für Mac
@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

Das Hinzufügen der @AfterAll-annotierten Methode zur vorhandenen CalculatorTest-Klasse gibt die folgende Ausgabe auf der Konsole aus:

  AfterAll-Anmerkungsausgabe

Beachten Sie, dass die Methode powerOffCalculator(), die die Annotation @AfterAll verwendet, am Ende der Testklasse gedruckt wird, nachdem alle Testmethoden ausgeführt wurden.

Was bedeutet ein hervorgehobener Kommentar auf YouTube?

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.

@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

Das Ausführen der Klasse CalculatorTest gibt die folgende Ausgabe auf der Konsole aus:

  AfterEach-Anmerkungsausgabe

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.