Что делает slice-тест вроде @WebMvcTest по сравнению с @SpringBootTest?
- Что такое slice-тесты в Spring Boot?
@SpringBootTest поднимает весь контекст — медленно, но реалистично. Slice-тесты — узкий срез: @WebMvcTest (контроллеры, фильтры, MockMvc), @DataJpaTest (репозитории и база), @JsonTest. Зависимости среза подменяются моками.
- В @WebMvcTest сервисы — @MockitoBean (Boot 3.4+, раньше @MockBean)
- Slice быстрее и проверяет одну область: маппинг, валидацию, коды ответов, JSON
- Контексты кэшируются — разные моки ломают кэш и замедляют набор тестов
А ещё @DataJpaTest по умолчанию на встроенной базе — лучше Testcontainers
Подробно
Смысл в скорости и фокусе: тест контроллера проверяет маршрутизацию, сериализацию, валидацию и коды ответов, и для этого не нужны ни база, ни брокер. Аналогично устроены @DataJpaTest (только слой персистентности, по умолчанию в транзакции с откатом после теста) и @JsonTest. @SpringBootTest поднимает контекст целиком — это уместно для сквозных сценариев, но заметно дороже. Важная деталь про производительность набора тестов: Spring кэширует контексты между тестовыми классами по ключу конфигурации, поэтому каждый уникальный набор моков или свойств порождает новый контекст. Много разнородных @MockBean — частая причина того, что тесты идут минутами.
Что хотят услышать
- Различие объёма контекста.
- Основные slice-аннотации.
- Моки и кэширование контекста.
Частые ошибки
- Использовать @SpringBootTest везде и получить медленный набор тестов.
- Плодить уникальные комбинации @MockBean и ломать кэширование контекста.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Поднимает полный контекст со всеми бинами, но запрещает любые обращения к базе
- ✓Поднимает только web-слой, а сервисы подменяются моками — контекст меньше
- ✗Запускает приложение на реальном порту с полным набором бинов
- ✗Отличается только именем аннотации
Что спросят дальше
- Почему @DataJpaTest откатывает транзакцию после теста?
- Как ключ кэширования контекста влияет на время прогона?
Разбор темы
- Тестирование Spring Boot
Пирамида тестов, unit без Spring, slice-тесты, @SpringBootTest и @MockBean, MockMvc/WebTestClient, Testcontainers и контрактные тесты.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.