Wstęp
JUnit 5 to powszechnie stosowany framework testowy dla języka Java, który pozwala programistom na tworzenie, wykonywanie i utrzymywanie testów w ramach ich projektów. Stanowi on ewolucję wcześniejszej wersji JUnit 4, wprowadzając szereg nowych opcji i ulepszeń, które upraszczają i optymalizują proces testowania.
Jego architektura opiera się na elastyczności, umożliwiając personalizację poprzez implementację dodatkowych rozszerzeń. Dodano także nowy zbiór adnotacji testowych, takich jak @DisplayName
i @RepeatedTest
, które zwiększają przejrzystość i adaptacyjność testów.
Ten przewodnik przeprowadzi Cię przez wszystkie aspekty JUnit 5, od początkowej konfiguracji po zaawansowane techniki testowania. Dowiesz się, jak tworzyć testy jednostkowe, integracyjne i funkcjonalne, a także jak korzystać z rozszerzeń i dostosowywać framework do indywidualnych potrzeb.
Konfiguracja JUnit 5
Aby rozpocząć pracę z JUnit 5, niezbędne jest dodanie poniższej zależności do pliku pom.xml
:
org.junit.jupiter junit-jupiter 5.9.0 test
Możliwe jest również dodanie zależności dla innych komponentów JUnit 5, na przykład junit-jupiter-params
(dla testów parametrycznych) lub junit-jupiter-engine
(dla niestandardowego uruchamiania testów).
Podstawowe Testy Jednostkowe
Testy jednostkowe koncentrują się na testowaniu pojedynczych metod lub klas niezależnie. W JUnit 5 do oznaczania metod testowych służy adnotacja @Test
. Na przykład:
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 powyższym kodzie testowana jest metoda add
klasy Calculator
. Adnotacja @Test
określa metodę jako testową, a assertEquals()
weryfikuje, czy wynik dodawania jest równy 5.
Testy Integracyjne
Testy integracyjne weryfikują interakcje między poszczególnymi składnikami systemu. W JUnit 5 wykorzystuje się adnotację @ExtendWith
w połączeniu z klasą rozszerzenia, która oferuje dodatkowe funkcje. Przykład:
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 przypadku test rozszerzono o klasę MockitoExtension
, która umożliwia 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 weryfikują całe funkcje lub scenariusze w aplikacji. W JUnit 5 nie ma specjalnej adnotacji dla testów funkcjonalnych, jednak można użyć istniejących, takich jak @Test
i @ExtendWith
. Przykład:
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 wykorzystano zależności Spring Boot do utworzenia kontekstu aplikacji i automatycznej konfiguracji obiektu MockMvc
do testowania kontrolerów webowych. Test weryfikuje, czy żądanie GET na adres URL /
zwraca kod odpowiedzi HTTP 200.
Rozszerzenia JUnit 5
JUnit 5 jest rozszerzalny, co oznacza, że można dodawać własne rozszerzenia, aby dostosować jego działanie. Rozszerzenia tworzy się przez implementację interfejsu Extension
. Na przykład:
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 } }
To rozszerzenie można zarejestrować w pliku junit-platform.properties
, poprzez dodanie poniższego wpisu:
junit.jupiter.extensions.post-processors = CustomExtension
Porównanie JUnit 4 i JUnit 5
JUnit 5 wprowadza wiele ulepszeń w porównaniu z JUnit 4, między innymi:
* Elastyczność: | Możliwość dodawania niestandardowych rozszerzeń. |
* Uproszczone adnotacje: | Nowe adnotacje, jak @DisplayName i @RepeatedTest , zwiększające czytelność i adaptacyjność. |
* Wyrażenia lambda: | Obsługa wyrażeń lambda w adnotacjach testowych. |
* Adnotowanie metod pomocniczych: | Możliwość adnotacji metod pomocniczych. |
* Testowanie parametryczne: | Rozszerzone wsparcie dla testów parametrycznych. |
Przykładowy Projekt
Aby zobaczyć JUnit 5 w praktyce, sprawdź przykładowy projekt na Github.
Podsumowanie
JUnit 5 jest efektywnym i elastycznym frameworkiem testowym, który umożliwia programistom tworzenie, uruchamianie i utrzymywanie testów w projektach Java. Dzięki elastyczności, prostym adnotacjom i wsparciu dla wyrażeń lambda stanowi wygodne i efektywne narzędzie do testowania różnorodnych aplikacji.
Wykorzystując techniki przedstawione w tym przewodniku, można skutecznie testować kod, podnosząc jego niezawodność i utrzymując wysoką jakość projektów w Javie.
Najczęściej Zadawane Pytania
1. Czym różni się JUnit 5 od JUnit 4? JUnit 5 oferuje rozszerzalność, uproszczone adnotacje, obsługę wyrażeń lambda, testowanie parametryczne oraz inne udoskonalenia.
2. Jak skonfigurować JUnit 5 w projekcie? Dodaj zależność junit-jupiter
do pliku pom.xml
.
3. Jak utworzyć test jednostkowy w JUnit 5? Użyj adnotacji @Test
, aby oznaczyć metody testowe.
4. Czym jest test integracyjny w JUnit 5? To test, który sprawdza interakcje między różnymi elementami systemu.
5. Jak testować kontrolery webowe z JUnit 5? Wykorzystaj zależności Spring Boot do stworzenia kontekstu aplikacji i obiektu MockMvc
.
6. Czym są rozszerzenia JUnit 5? Są to klasy implementujące interfejs Extension
, pozwalające na modyfikację działania frameworka.
7. Jak porównać JUnit 4 i JUnit 5? JUnit 5 oferuje rozszerzalność, prostsze adnotacje, wsparcie dla wyrażeń lambda i inne ulepszenia w porównaniu z JUnit 4.
8. Gdzie znaleźć więcej informacji o JUnit 5? Zajrzyj do oficjalnej dokumentacji oraz do repozytorium na Githubie.
newsblog.pl