Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем