Какую версию JUnit вы используете и почему?

«Какую версию JUnit вы используете и почему?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я использую JUnit 5 (Jupiter) — это современная, модульная платформа для тестирования на Java.

Ключевые преимущества JUnit 5 перед JUnit 4:

  • Поддержка Java 8+: лямбда-выражения, @ParameterizedTest, @TestFactory для динамических тестов.
  • Модульная архитектура: junit-jupiter-api (для написания), junit-jupiter-engine (для запуска).
  • Улучшенные аннотации: @BeforeEach, @AfterEach вместо @Before, @After.
  • Расширяемость: модель расширений (@ExtendWith) вместо правил (@Rule).
  • Улучшенные утверждения (Assertions): поддерживают лямбды для ленивых сообщений об ошибках.

Пример теста:

import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;

class CalculatorTest {
    @Test
    @DisplayName("Сложение двух чисел")
    void additionTest() {
        assertEquals(4, Calculator.add(2, 2), "2 + 2 должно равняться 4");
    }

    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    void isPositive_ParameterizedTest(int number) {
        assertTrue(number > 0, () -> number + " должно быть положительным");
    }
}

Сопутствующие библиотеки:

  • AssertJ — для fluent-assertions, повышающих читаемость.
  • Mockito — для мокирования.
  • Spring Boot Test — для интеграционного тестирования Spring-приложений.