Definicja #
JUnit to open-source'owy framework do pisania i uruchamiania testów jednostkowych w języku Java. Stworzony przez Kenta Becka i Ericha Gammę w 1997 roku, JUnit stał się de facto standardem testowania w ekosystemie Javy i wzorem dla frameworków testowych w innych językach (.NET: NUnit, Python: pytest).
JUnit 5 (Jupiter) to aktualna wersja, gruntownie przepisana w stosunku do JUnit 4 — składa się z trzech subprojektów:
- JUnit Platform — fundament do uruchamiania testów na JVM; definiuje API dla narzędzi (Maven Surefire, Gradle, IDE)
- JUnit Jupiter — nowe API do pisania testów (adnotacje
@Test,@BeforeEach, etc.) i rozszerzeń (ExtensionAPI) - JUnit Vintage — backward compatibility z testami JUnit 3 i 4
Kluczowe adnotacje JUnit 5:
@Test— oznacza metodę testową@BeforeEach/@AfterEach— setup i teardown przed/po każdym teście@BeforeAll/@AfterAll— setup/teardown dla całej klasy testowej (metody statyczne)@ParameterizedTest+@ValueSource,@CsvSource,@MethodSource— testy parametryczne@Nested— zagnieżdżone klasy testowe do grupowania powiązanych testów@DisplayName— czytelna nazwa testu w raportach@ExtendWith— integracja z Mockito, Spring, itp.
Asercje w JUnit 5 (org.junit.jupiter.api.Assertions): assertEquals, assertTrue, assertThrows, assertAll.
Zastosowania #
JUnit stosuje się do:
- Testów jednostkowych logiki biznesowej — weryfikacja poprawności metod, klas domenowych i serwisów w izolacji od bazy danych i innych zależności
- Testów integracyjnych z Spring Boot —
@SpringBootTesturuchamia kontekst Spring; JUnit 5 z Mockito mockuje zależności - TDD (Test-Driven Development) — JUnit jako narzędzie do cyklu red-green-refactor w projektach Java
- CI/CD pipeline — Maven Surefire i Gradle uruchamiają testy JUnit automatycznie przy każdym buildzie
- Testowania REST API z MockMvc — testy kontrolerów Spring MVC bez uruchamiania serwera HTTP
Ścieżka nauki #
JUnit jest pierwszym frameworkiem testowym, którego powinna nauczyć się każda osoba pisząca w Javie.
Zacznij od:
- Dodanie zależności do projektu:
org.junit.jupiter:junit-jupiter(Maven/Gradle) - Tworzenie pierwszego testu: klasa testowa, metoda z
@Test, asercje (assertEquals,assertTrue) - Cykl życia testu:
@BeforeEachdo inicjalizacji,@AfterEachdo sprzątania - Uruchamianie testów: z IDE (IntelliJ, Eclipse) i wiersza poleceń (
mvn test,gradle test)
Następnie poznaj:
- Mockito — mockowanie zależności (
@Mock,when().thenReturn(),verify()) z integracją JUnit 5 (@ExtendWith(MockitoExtension.class)) - Testy parametryczne:
@ParameterizedTestz@CsvSourcei@MethodSource - Asercja AssertJ — bardziej ekspresywne asercje niż wbudowane w JUnit
- Testy integracyjne Spring Boot:
@SpringBootTest,@DataJpaTest, MockMvc - Wzorzec AAA: Arrange-Act-Assert jako konwencja struktury testów
FAQ #
- Czym różni się JUnit 4 od JUnit 5?
- JUnit 5 (Jupiter) to gruntowne przepisanie JUnit 4. Kluczowe różnice: nowa architektura (Platform/Jupiter/Vintage), Extension API zamiast @Rule i @ClassRule, @BeforeEach zamiast @Before, wsparcie dla testów parametrycznych (@ParameterizedTest), zagnieżdżone klasy (@Nested) i lepsze komunikaty asercji. Nowe projekty powinny używać JUnit 5.
- Czym JUnit różni się od Mockito?
- JUnit to framework do strukturyzowania i uruchamiania testów (adnotacje, asercje, cykl życia). Mockito to biblioteka do tworzenia obiektów-atrap (mock) zależności. Te dwa narzędzia są komplementarne i używane razem: JUnit zarządza testem, Mockito dostarcza mocki zamiast prawdziwych serwisów czy repozytoriów.
- Czy JUnit działa tylko z Javą?
- JUnit działa na JVM — obsługuje Javę, Kotlina i Groovy. Dla Kotlina popularną alternatywą jest Kotest (dawniej KotlinTest) z bardziej idiomatycznym API. JUnit jest jednak standardem i działa dobrze z Kotlinem przez @ExtendWith i standardowe adnotacje.
- Ile zarabia Java Developer znający JUnit?
- JUnit to podstawowa umiejętność każdego Java Developera — wymagana w praktycznie każdej ofercie pracy. Mid Java Developer zarabia od 12 000 do 20 000 zł brutto, senior od 20 000 do 35 000 zł. Znajomość TDD i testowania integracyjnego (Spring Boot Test) wyróżnia kandydatów.