Тестування
JUnit
Стандартний фреймворк юніт-тестування для Java і JVM, батько сімейства xUnit.
Що це
JUnit створили Кент Бек і Еріх Гамма у 1997 році, і він став основою для xUnit-інструментів в інших мовах. Сучасна версія JUnit 5 складається з Platform (запуск), Jupiter (нова модель програмування й анотації) та Vintage (сумісність зі старими тестами JUnit 3 і 4).
Тести це методи з анотацією @Test. Є @BeforeEach, @AfterEach, параметризовані тести (@ParameterizedTest), вкладені класи (@Nested) і розширення. Перевірки робляться через Assertions або сторонні AssertJ, Hamcrest.
JUnit інтегрований із Maven, Gradle та IDE. З ним зазвичай поєднують Mockito для моків, а в Spring Boot він є тестовою основою за замовчуванням.
Коли брати
- Юніт- та інтеграційні тести Java і Kotlin на JVM.
- Проєкти на Spring Boot: JUnit це стандарт.
- Потрібна параметризація, вкладені тести та розширення.
Коли не варто
- Тести не на JVM.
- UI та end-to-end тести браузера: беруть Playwright чи Selenium (JUnit лише запускає).
Ключові поняття
- @Test and lifecycle
@BeforeEach,@AfterEach,@BeforeAll,@AfterAllкерують підготовкою.- Assertions
assertEquals,assertThrows,assertAllперевіряють результат.- Parameterized tests
- Один тест запускається на наборі даних із
@ValueSource,@CsvSource. - Extensions
- Механізм
@ExtendWithдля моків, Spring, Testcontainers. - Nested tests
- Класи
@Nestedгрупують сценарії зі спільним станом.
Приклад
Питання на співбесіді
1. Із чого складається JUnit 5?
З трьох частин: Platform запускає тести, Jupiter дає нове API й анотації, Vintage запускає старі тести JUnit 3 і 4.
2. Як перевірити, що метод кидає виняток?
Через
assertThrows(IllegalArgumentException.class, () -> service.run()). Метод повертає виняток, якого можна додатково перевірити.3. Чим @BeforeEach відрізняється від @BeforeAll?
@BeforeEachвиконується перед кожним тестом,@BeforeAllодин раз перед усіма в класі й має бути статичним (якщо немає@TestInstance(PER_CLASS)).4. Навіщо Mockito разом із JUnit?
JUnit запускає тести й перевіряє результат, а Mockito створює заглушки залежностей, щоб ізолювати тестований клас від бази, мережі й інших сервісів.
Схожі технології
- JavaСтатично типізована мова для JVM: основа корпоративних бекендів, Android і великих систем.
- KotlinСучасна лаконічна мова для JVM, Android і мультиплатформної розробки, повністю сумісна з Java.
- Spring BootНадбудова над Spring для Java і Kotlin, що дає автоналаштування й запуск застосунку однією командою.
Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).