Что такое JUnit?

«Что такое JUnit?» — вопрос из категории Фреймворки тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JUnit — это ведущий фреймворк для модульного тестирования (Unit Testing) приложений на Java. Я использую его для написания автоматизированных тестов, которые проверяют корректность работы отдельных классов или методов в изоляции.

Основные концепции (JUnit 5/Jupiter):

  • @Test: Аннотация, помечающая метод как тестовый случай.
  • @BeforeEach / @AfterEach: Методы, выполняемые перед и после каждого теста (например, для инициализации и очистки тестовых данных).
  • @BeforeAll / @AfterAll: Статические методы, выполняемые один раз перед всеми и после всех тестов в классе (например, для установки соединения с базой данных).
  • Утверждения (Assertions): Статические методы класса Assertions для проверки ожидаемых результатов (assertEquals, assertTrue, assertThrows и т.д.).

Пример теста для сервиса калькулятора:

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

class CalculatorServiceTest {
    private CalculatorService calculator;

    @BeforeEach
    void setUp() {
        calculator = new CalculatorService(); // Инициализация перед каждым тестом
    }

    @Test
    void testAddition_PositiveNumbers_ReturnsSum() {
        // Arrange (Подготовка) уже сделана в setUp()
        // Act (Действие)
        int result = calculator.add(10, 5);
        // Assert (Проверка)
        assertEquals(15, result, "10 + 5 должно равняться 15");
    }

    @Test
    void testDivide_ByZero_ThrowsException() {
        // Act & Assert
        ArithmeticException exception = assertThrows(ArithmeticException.class,
            () -> calculator.divide(10, 0)
        );
        assertEquals("Division by zero", exception.getMessage());
    }
}

В чем его ценность для QA/разработки: JUnit интегрируется со сборщиками (Maven/Gradle) и CI/CD-пайплайнами, что позволяет автоматически запускать набор тестов при каждой сборке, быстро находя регрессии. Параметризованные тесты (@ParameterizedTest) помогают проверить множество сценариев с разными входными данными.