JUnit 5
Тема дорожной карты · Java
JUnit 5 — стандартный фреймворк тестирования для Java, предоставляющий богатый набор аннотаций и утверждений, управляющих жизненным циклом модульного тестирования в JDK-проектах. Фреймворк структурирован вокруг трёх модулей — JUnit Platform, JUnit Jupiter и JUnit Vintage — и вводит мощные аннотации: @Test, @BeforeEach, @AfterEach, @ParameterizedTest и @ExtendWith для компоновки наборов тестов. JUnit 5 беспрепятственно интегрируется с инструментами сборки Apache Maven и Gradle, а также с CI-конвейерами, делая его краеугольным камнем любой стратегии тестирования Java наряду с Mockito, AssertJ и Testcontainers. Параметризованные тесты на основе @ValueSource, @CsvSource или @MethodSource позволяют одному методу теста JUnit 5 покрывать множество комбинаций входных данных без дублирования кода. В сочетании с Mockito для мокирования и AssertJ для гибких утверждений JUnit 5 обеспечивает всестороннее покрытие тестами для приложений на основе Spring, Hibernate и JDBC, работающих на JVM.
Как это работает
JUnit 5 использует JUnit 5 как де факто unit-test framework (@Test, @ParameterizedTest, @BeforeEach), AssertJ или Hamcrest для fluent-ассертов, Mockito для моков, Testcontainers для подъёма реальных БД/сервисов в Docker для integration-тестов, REST Assured для HTTP API-тестов. Spring Boot имеет свои test-slice (@WebMvcTest, @DataJpaTest), загружающие минимальный контекст.
Когда применять
JUnit 5 + AssertJ — дефолтный стек. Testcontainers — для любого кода, касающегося реальной БД; мок БД прячет реальные баги (constraint violations, ошибки запроса). Mockito — осторожно; over-mocking тестирует мок, не код. Тесты в CI на каждый PR; валите билды на flake.
Типичные ошибки
Ловушки JUnit 5: тесты, делящие state через static-поля; мокинг всего, пока тест — это просто verify(...)-вызовы; медленные Spring Boot integration-тесты, потому что каждый тест поднимает весь контекст (используйте slice-тесты); flaky-тесты оставлены — каждый подрывает доверие.