Вопрос с собеседования · Spring

Что верно про пирамиду тестов в Spring-приложении?

MiddleТестирование Spring BootSpring Boot
Ещё спрашивают так:
  • Какие тесты писать в Spring-приложении?
Коротко

Внизу — много быстрых unit-тестов логики без Spring, в середине — интеграционные (slice-тесты, Testcontainers, контракты), наверху — единицы сквозных.

  • Чем выше уровень, тем медленнее, хрупче и дороже отладка
  • Сервисную логику тестировать без контекста: конструктор и моки
  • Контрактные тесты заменяют часть сквозных между сервисами

А ещё «Песочные часы» без интеграционных тестов — признак проблем

Подробно

Перевёрнутая пирамида — распространённая беда: набор идёт полчаса, падает от случайных причин, и в него перестают верить. Ключевой приём в Spring — держать доменную логику независимой от фреймворка, тогда её можно тестировать обычным JUnit без поднятия контекста, а это тысячи тестов за секунды. Средний слой отвечает на вопросы, которые unit-тест закрыть не может: правильно ли смаплен запрос, работает ли миграция, тот ли SQL порождает репозиторий. Наверху остаются несколько сценариев, проверяющих систему целиком. Отдельно стоит упомянуть контрактные тесты: во взаимодействии между сервисами они заменяют значительную часть сквозных, оставаясь быстрыми.

Что хотят услышать

  • Уровни пирамиды и пропорции.
  • Что тестировать на каждом уровне в Spring.

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

  • Тестировать бизнес-логику через @SpringBootTest из-за привычки.
  • Наращивать число сквозных тестов вместо укрепления нижних уровней.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Основание — быстрые unit-тесты логики без Spring-контекста
  • ✓Середина — slice- и интеграционные тесты связывания и инфраструктуры
  • ✓Вершина — немногочисленные медленные сквозные тесты
  • ✗Чем больше сквозных тестов, тем надёжнее набор: они проверяют систему целиком, как пользователь

Что спросят дальше

  • Как контрактные тесты сокращают потребность в сквозных?
  • Что делать, если доменная логика неотделима от аннотаций Spring?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования