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-тест может обращаться к БД.