Что верно про пирамиду тестов в Spring-приложении?
- Какие тесты писать в Spring-приложении?
Внизу — много быстрых unit-тестов логики без Spring, в середине — интеграционные (slice-тесты, Testcontainers, контракты), наверху — единицы сквозных.
- Чем выше уровень, тем медленнее, хрупче и дороже отладка
- Сервисную логику тестировать без контекста: конструктор и моки
- Контрактные тесты заменяют часть сквозных между сервисами
А ещё «Песочные часы» без интеграционных тестов — признак проблем
Подробно
Перевёрнутая пирамида — распространённая беда: набор идёт полчаса, падает от случайных причин, и в него перестают верить. Ключевой приём в Spring — держать доменную логику независимой от фреймворка, тогда её можно тестировать обычным JUnit без поднятия контекста, а это тысячи тестов за секунды. Средний слой отвечает на вопросы, которые unit-тест закрыть не может: правильно ли смаплен запрос, работает ли миграция, тот ли SQL порождает репозиторий. Наверху остаются несколько сценариев, проверяющих систему целиком. Отдельно стоит упомянуть контрактные тесты: во взаимодействии между сервисами они заменяют значительную часть сквозных, оставаясь быстрыми.
Что хотят услышать
- Уровни пирамиды и пропорции.
- Что тестировать на каждом уровне в Spring.
Частые ошибки
- Тестировать бизнес-логику через @SpringBootTest из-за привычки.
- Наращивать число сквозных тестов вместо укрепления нижних уровней.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Основание — быстрые unit-тесты логики без Spring-контекста
- ✓Середина — slice- и интеграционные тесты связывания и инфраструктуры
- ✓Вершина — немногочисленные медленные сквозные тесты
- ✗Чем больше сквозных тестов, тем надёжнее набор: они проверяют систему целиком, как пользователь
Что спросят дальше
- Как контрактные тесты сокращают потребность в сквозных?
- Что делать, если доменная логика неотделима от аннотаций Spring?
Разбор темы
- Тестирование Spring Boot
Пирамида тестов, unit без Spring, slice-тесты, @SpringBootTest и @MockBean, MockMvc/WebTestClient, Testcontainers и контрактные тесты.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.