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.
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
pakiet com.aplikacja;
publicznyklasaKalkulator{
publicznystatycznyintDodaj(int liczba1, int liczba2){
zwrócić liczba1 + liczba2;
}
publicznystatycznyintodejmować(int liczba1, int liczba2){
zwrócić numer1 - numer2;
}
publicznystatycznyintzwielokrotniać(int liczba1, int liczba2){
zwrócić liczba1 * liczba2;
}
publicznystatycznyintdzielić(int liczba1, int liczba2){
zwrócić numer1 / numer2;
}
}
KalkulatorKlasa testowa
importstatycznyorganizacja.junit.Jowisz.api.Twierdzenia.*;
importorganizacja.junit.Jowisz.api.Przed wszystkim;
importorganizacja.junit.Jowisz.api.Test;
importorganizacja.junit.Jowisz.api.Wyświetlana nazwa;@DisplayName("Test klasy demonstrujący, jak to zrobić posługiwać się ten zanimorazpo adnotacje”).
klasaKalkulatorTest{
@Przed wszystkim
publicznystatycznypróżniaPowerOnCalculator(){
System.out.println("Kalkulator jest włączony");
}@Test
@Wyświetlana nazwa("Metoda testowania, która dodaje dwie wartości całkowite.")
publicznypróżniatestDodaj(){
AssertEquals(7, Kalkulator.Dodaj(3, 4));
}@Test
@Wyświetlana nazwa("Metoda testowania, która odejmuje jedną wartość całkowitą od drugiej.")
publicznypróżniatestOdejmij(){
AssertEquals(6, Kalkulator.odejmować(9, 3));
}@Test
@Wyświetlana nazwa("Metoda testowania, która mnoży dwie wartości całkowite")
publicznypróżniatestPomnóż(){
AssertEquals(10, Kalkulator.zwielokrotniać(5, 2));
}
@Test
@Wyświetlana nazwa("Metoda testowania, która dzieli jedną wartość całkowitą przez drugą")
publicznypróżniatestPodziel(){
AssertEquals(2, Kalkulator.dzielić(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.
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.
importstatycznyorganizacja.junit.Jowisz.api.Twierdzenia.*;
importorganizacja.junit.Jowisz.api.Przed wszystkim;
importorganizacja.junit.Jowisz.api.Przed każdym;
importorganizacja.junit.Jowisz.api.Test;
@DisplayName("Test klasy demonstrujący, jak to zrobić posługiwać się ten zanimorazpo adnotacje”).
klasaKalkulatorTest{
@Przed wszystkim
publicznystatycznypróżniaPowerOnCalculator(){
System.out.println("Kalkulator jest włączony");
}
@Bez tytułu
publicznypróżniawyczyśćKalkulator(){
System.out.println("Kalkulator jest gotowy");
}
@Test
@Wyświetlana nazwa("Metoda testowania, która dodaje dwie wartości całkowite.")
publicznypróżniatestDodaj(){
AssertEquals(7, Kalkulator.Dodaj(3, 4));
}
@Test
@Wyświetlana nazwa("Metoda testowania, która odejmuje jedną wartość całkowitą od drugiej.")
publicznypróżniatestOdejmij(){
AssertEquals(6, Kalkulator.odejmować(9, 3));
}
@Test
@Wyświetlana nazwa("Metoda testowania, która mnoży dwie wartości całkowite")
publicznypróżniatestPomnóż(){
AssertEquals(10, Kalkulator.zwielokrotniać(5, 2));
}
@Test
@Wyświetlana nazwa("Metoda testowania, która dzieli jedną wartość całkowitą przez drugą")
publicznypróżniatestPodziel(){
AssertEquals(2, Kalkulator.dzielić(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.
@W końcu
publicznystatycznypróżniaPowerOffKalkulator(){
System.out.println("Kalkulator jest wyłączony");
}
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.
@Po każdym
publicznypróżniapowrótWyniki(){
System.out.println("Wyniki są gotowe");
}
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 wyniku 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.