Spis treści:
Samouczek JUnit5: Kompletny przewodnik do frameworka testowania w języku Java
Wprowadzenie
JUnit5 to popularny framework testowania w języku Java, który umożliwia programistom pisanie, uruchamianie i utrzymywanie testów w ramach ich projektów. Jest rozszerzeniem poprzedniego frameworka JUnit4 i oferuje szereg nowych funkcji i ulepszeń, ułatwiających i usprawniających proces testowania.
JUnit5 jest oparty na koncepcji rozszerzalności, co umożliwia dostosowanie jego zachowania poprzez dodawanie niestandardowych rozszerzeń. Wprowadził również nowy zestaw adnotacji testowych, takie jak @DisplayName
i @RepeatedTest
, które zapewniają większą przejrzystość i elastyczność testów.
W tym samouczku przeprowadzimy Cię przez wszystkie aspekty JUnit5, od podstawowej konfiguracji po zaawansowane techniki testowania. Pokażemy Ci, jak pisać testy jednostkowe, testy integracyjne i testy funkcjonalne, a także jak używać rozszerzeń i dostosowywać framework zgodnie z Twoimi potrzebami.
Konfiguracja JUnit5
Aby rozpocząć korzystanie z JUnit5, musisz dodać poniższą zależność do swojego pliku pom.xml
:
xml
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>
Możesz także dodać zależności dla innych modułów JUnit5, takich jak junit-jupiter-params
(do testów parametrycznych) lub junit-jupiter-engine
(do niestandardowego uruchamiania testów).
Podstawowe testy jednostkowe
Testy jednostkowe skupiają się na testowaniu pojedynczych metod lub klas w izolacji. W JUnit5 wykorzystuje się adnotację @Test
do oznaczania metod testowych. Na przykład:
java
import org.junit.jupiter.api.Test;
public class CalculatorTest {
@Test
void add() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result);
}
}
W tym przykładzie testujemy metodę add
klasy Calculator
. Adnotacja @Test
oznacza metodę jako test, a assertEquals()
sprawdza, czy wynik dodania jest równy 5.
Testy integracyjne
Testy integracyjne testują interakcje między różnymi komponentami systemu. W JUnit5 wykorzystuje się adnotację @ExtendWith
wraz z klasą rozszerzenia, która zapewnia dodatkowe funkcjonalności. Na przykład:
java
import org.junit.jupiter.api.ExtendWith;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class ServiceTest {
@Mock
private Repository repository;
@InjectMocks
private Service service;
@Test
void save() {
service.save("test");
verify(repository).save("test");
}
}
W tym przykładzie rozszerzamy test o klasę MockitoExtension
, która umożliwia nam korzystanie z biblioteki Mockito do tworzenia obiektów zastępczych. Test sprawdza, czy metoda save
klasy Service
wywołuje metodę save
repozytorium.
Testy funkcjonalne
Testy funkcjonalne testują całe funkcje lub scenariusze w aplikacji. W JUnit5 nie ma dedykowanej adnotacji dla testów funkcjonalnych, ale możesz użyć istniejących adnotacji, takich jak @Test
i @ExtendWith
. Na przykład:
java
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
@SpringBootTest
@AutoConfigureMockMvc
public class ControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void index() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/"))
.andExpect(MockMvcResultMatchers.status().isOk());
}
}
W tym przykładzie używamy zależności Spring Boot do tworzenia aplikacji kontekstowej i automatycznego konfigurowania obiektu MockMvc
do testowania kontrolerów internetowych. Test sprawdza, czy żądanie GET do adresu URL /
zwraca kod stanu HTTP 200.
Rozszerzenia JUnit5
JUnit5 jest rozszerzalny, co oznacza, że możesz dodawać własne rozszerzenia, aby dostosować jego zachowanie. Rozszerzenia można tworzyć poprzez implementację interfejsu Extension
. Na przykład:
java
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.TestInstancePostProcessor;
public class CustomExtension implements TestInstancePostProcessor {
@Override
public void postProcessTestInstance(Object testInstance, ExtensionContext context) {
// dostosowanie instancji testu
}
}
Ten rozszerzenie można zarejestrować w pliku junit-platform.properties
, dodając następujący wpis:
junit.jupiter.extensions.post-processors = CustomExtension
Porównanie JUnit4 i JUnit5
JUnit5 oferuje szereg ulepszeń w porównaniu do JUnit4, w tym:
* Rozszerzalność: Możliwość dodawania niestandardowych rozszerzeń.
* Uproszczone adnotacje: Nowe adnotacje, takie jak @DisplayName
i @RepeatedTest
, zapewniające większą przejrzystość i elastyczność.
* Wyrażenia lambda: Obsługa wyrażeń lambda w adnotacjach testowych.
* Urządzenia adnotowalne: Możliwość adnotacji metod pomocniczych.
* Testowanie parametryczne: Ulepszone wsparcie dla testów parametrycznych.
Przykładowy projekt
Aby zobaczyć JUnit5 w akcji, zobacz przykładowy projekt na Github.
Konkluzja
JUnit5 to potężny i elastyczny framework testowy, który umożliwia programistom pisanie, uruchamianie i utrzymywanie testów w ramach ich projektów w języku Java. Jego rozszerzalność, uproszczone adnotacje i obsługa wyrażeń lambda sprawiają, że jest wygodnym i efektywnym rozwiązaniem do testowania różnego rodzaju aplikacji.
Stosując techniki omówione w tym samouczku, możesz skutecznie testować kod, zwiększać jego niezawodność i utrzymywać wysoką jakość swoich projektów w języku Java.
Często zadawane pytania
1. Czym różni się JUnit5 od JUnit4? JUnit5 oferuje rozszerzalność, uproszczone adnotacje, obsługę wyrażeń lambda, testowanie parametryczne i inne ulepszenia.
2. Jak skonfigurować JUnit5 w moim projekcie? Dodaj zależność junit-jupiter
do swojego pliku pom.xml
.
3. Jak utworzyć test jednostkowy w JUnit5? Użyj adnotacji @Test
do oznaczania metod testowych.
4. Co to jest test integracyjny w JUnit5? Jest to test, który testuje interakcje między różnymi komponentami systemu.
5. Jak testować kontrolery internetowe za pomocą JUnit5? Wykorzystaj zależności Spring Boot do tworzenia aplikacji kontekstowej i obiektu MockMvc
.
6. Co to są rozszerzenia JUnit5? Rozszerzenia JUnit5 to klasy implementujące interfejs Extension
, które umożliwiają dostosowanie zachowania frameworka.
7. Jak porównać JUnit4 i JUnit5? JUnit5 oferuje rozszerzalność, uproszczone adnotacje, obsługę wyrażeń lambda i inne ulepszenia w stosunku do JUnit4.
8. Gdzie mogę znaleźć więcej informacji o JUnit5? Możesz zapoznać się z oficjalną dokumentacją oraz repozytorium na Githubie.