Jak korzystać z adnotacji @Before i @After w JUnit

Jak korzystać z adnotacji @Before i @After w JUnit

Podczas pisania zestawu testów jednostkowych mogą wystąpić pewne czynności niezwiązane z testami, które należy wykonać. Działania te mogą przybierać dowolną formę. Przed wykonaniem testu może być konieczne nawiązanie połączenia z bazą danych lub zebranie zasobów. Po wykonaniu każdego przypadku testowego może być konieczne zwolnienie niektórych zasobów.





MAKEUSEOF WIDEO DNIA

Wykonywanie którejkolwiek z tych czynności niezwiązanych z testowaniem poza zakresem klasy testów jednostkowych może być żmudne, jeśli nie niemożliwe. Pomyślne wykonanie klasy testowej może zależeć od tych działań, dlatego JUnit udostępnia dwie pary adnotacji, aby rozwiązać ten problem.





Adnotacja @BeforeAll

Klasa testowa JUnit może mieć jedną lub więcej metod testowych. Adnotacja @BeforeAll sygnalizuje, że określona metoda powinna zostać wykonana przed wszystkimi metodami testowymi w klasie testowej. Metoda skojarzona z tą adnotacją jest wykonywana tylko raz (na początku testu) niezależnie od liczby metod testowych w klasie testowej.





Każda metoda korzystająca z adnotacji @BeforeAll musi spełniać kilka wymagań. Te metody muszą mieć void zwracany typ, muszą być publiczne i nie mogą być prywatne. Adnotacja @BeforeAll jest idealna do ustanowienia połączenie z bazą danych lub tworzenie nowego pliku. W tym artykule użyto klasy testowej kalkulatora, aby pokazać, jak można używać adnotacji @BeforeAll.

Klasa kalkulatora

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;
}
}

KalkulatorKlasa testowa

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));
}
}

W tej klasie adnotacja @BeforeAll współpracuje z metodą powerOnCalculator(), która wyświetla komunikat „Kalkulator jest włączony” przed uruchomieniem testu. Pomyślne wykonanie testu drukuje następujący raport z testu:



  Raport adnotacji BeforeAll

Jak widać metoda powiązana z adnotacją @BeforeAll nie pojawia się w raporcie z testu. Jeśli jednak wystąpi błąd w metodzie adnotacji @BeforeAll, wyniki raportu z testu wskażą to z niepowodzeniem.

gdzie kupić tanie części komputerowe

Adnotacja @BeforeEach

Podobnie jak metoda z adnotacjami @BeforeAll, metoda z adnotacjami @BeforeEach nie pojawi się w raporcie z testu. Metoda z adnotacją @BeforeEach jest wykonywana przed każdą metodą testową w klasie testowej. Tak więc, jeśli klasa testowa zawiera dwie metody testowe, adnotacja @BeforeEach zostanie wykonana dwukrotnie.





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));
}
}

Dodanie adnotacji @BeforeEach do klasy CalculatorTest daje następujące dane wyjściowe:

  Przed każdym wyjściem adnotacji

Metoda skojarzona z adnotacją @BeforeEach jest wykonywana cztery razy, raz przed każdą metodą testową. Należy zauważyć, że metoda @BeforeEach nie jest statyczna, ma zwracany typ void i nie jest prywatna, ponieważ są to obowiązkowe postanowienia. Należy również zauważyć, że metoda powiązana z adnotacją @BeforeEach działa po metodzie @BeforeAll.





Adnotacja @AfterAll

Metoda z adnotacją @AfterAll zostanie wykonana po zakończeniu wykonywania wszystkich metod testowych w klasie testowej. Adnotacja @AfterAll jest idealna dla podstawowe operacje na plikach , na przykład zamykanie pliku lub rozłączanie z bazą danych. Adnotacja @AfterAll jest odpowiednikiem adnotacji @BeforeAll. Podobnie jak adnotacja @BeforeAll, adnotacja @AfterAll musi być statyczna, musi zwracać wartość void i nie może być prywatna.

jak usunąć wszystkie wiadomości na mac
@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

Dodanie metody z adnotacją @AfterAll do istniejącej klasy CalculatorTest spowoduje wyświetlenie w konsoli następującego wyniku:

  Wyjście adnotacji AfterAll

Zauważ, że metoda powerOffCalculator(), która używa adnotacji @AfterAll, drukuje na końcu klasy testowej, po wykonaniu wszystkich metod testowych.

Adnotacja @AfterEach

Adnotacja @AfterEach jest odpowiednikiem adnotacji @BeforeEach. Mają te same obowiązkowe postanowienia, które różnią się nieco od adnotacji @BeforeAll i @AfterAll. To, co odróżnia adnotację @AfterEach od adnotacji @BeforeEach (innej niż ich nazwy), polega na tym, że metoda @AfterEach jest uruchamiana po każdej metodzie testowej.

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

Wykonanie klasy CalculatorTest wyświetla w konsoli następujące dane wyjściowe:

  Po każdym wyjściu adnotacji

Dane wyjściowe pokazują, że metoda skojarzona z adnotacją @AfterEach (returnResults) drukuje cztery razy. Każde wykonanie metody returnResults() następuje dopiero po wykonaniu każdego testu jednostkowego. Widać to po tym, że dane wyjściowe metody returnResults() pojawiają się po każdym wyjściu metody skojarzonej z adnotacją @BeforeEach.

Wypoleruj swoje zestawy testowe za pomocą adnotacji

JUnit umożliwia obsługę procesów niezwiązanych z testowaniem przy użyciu adnotacji pary przed i po. Te cztery adnotacje należą do listy kilku innych adnotacji, które zwiększają wartość Twoich testów. Kolejną adnotacją JUnit jest @DisplayName.

Dwa przykłady kodu, które wyświetlają pełną klasę CalculatorTest, używają adnotacji @DisplayName. Adnotacja @DisplayName pomaga w tworzeniu bardziej znaczących nazw dla klas testowych i metod testowych.