Тестування

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 групують сценарії зі спільним станом.

Приклад

Параметризований тест JUnit 5.

Питання на співбесіді

  1. 1. Із чого складається JUnit 5?

    З трьох частин: Platform запускає тести, Jupiter дає нове API й анотації, Vintage запускає старі тести JUnit 3 і 4.

  2. 2. Як перевірити, що метод кидає виняток?

    Через assertThrows(IllegalArgumentException.class, () -> service.run()). Метод повертає виняток, якого можна додатково перевірити.

  3. 3. Чим @BeforeEach відрізняється від @BeforeAll?

    @BeforeEach виконується перед кожним тестом, @BeforeAll один раз перед усіма в класі й має бути статичним (якщо немає @TestInstance(PER_CLASS)).

  4. 4. Навіщо Mockito разом із JUnit?

    JUnit запускає тести й перевіряє результат, а Mockito створює заглушки залежностей, щоб ізолювати тестований клас від бази, мережі й інших сервісів.

Логотипи належать їхнім власникам і використані лише для ідентифікації. Іконки: Simple Icons (CC0), Devicon (MIT).

Розділи платформи