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