Gymterview
junior

Что такое модульное тестирование?

Модульное (unit) тестирование – проверка корректности отдельных модулей (классов, методов) в изоляции от внешних зависимостей, которые заменяются моками или стабами.

Аналогия из жизни: проверка отдельной детали на заводе перед сборкой. Каждый болт тестируется отдельно от всего механизма – если он бракованный, это выясняется до того, как машина будет собрана.

Характеристики хороших unit-тестов (F.I.R.S.T.)

Принцип Значение
Fast Выполняются за миллисекунды
Isolated Не зависят от других тестов, БД, сети
Repeatable Одинаковый результат при каждом запуске
Self-validating Pass/fail без ручной проверки
Timely Написаны вовремя (в идеале – до или одновременно с кодом)

Пример

Пример
class CalculatorTest {

    @Test
    @DisplayName("Сложение двух положительных чисел")
    void shouldAddTwoNumbers() {
        Calculator calc = new Calculator();
        assertEquals(5, calc.add(2, 3));
    }

    @Test
    @DisplayName("Деление на ноль бросает исключение")
    void shouldThrowOnDivisionByZero() {
        Calculator calc = new Calculator();
        assertThrows(ArithmeticException.class, () -> calc.divide(10, 0));
    }
}

Ключевые принципы

  • Unit-тесты проверяют логику, а не инфраструктуру
  • Зависимости заменяются через Mockito/stub – тест должен быть изолирован
  • Один тест = один сценарий; имя теста описывает ожидание
  • Тестируйте публичный API, не приватные методы

Частые ошибки

  • Тестирование приватных методов – тестируйте публичный API, не реализацию
  • Тесты, зависящие от порядка выполнения – каждый тест должен быть независим
  • Один assert на весь класс – один тест проверяет одно поведение

Как используется в 2026

  • JUnit 5 + Mockito + AssertJ – стандартный стек для unit-тестов
  • Минимальное время выполнения – сотни unit-тестов за секунды

На собеседовании: интервьюер ожидает не просто определение, а понимание принципа F.I.R.S.T. и умение объяснить, почему unit-тест должен быть изолирован. Частая ошибка – путать unit-тесты с интеграционными или говорить, что unit-тест может обращаться к БД.