Этап 6 из 10 · ≈ 4 ч

Тестирование Spring Boot

Основа с Junior

Срезы контекста, MockMvc, Testcontainers и контрактные тесты.

Что важно знать

  • Срезы: @WebMvcTest, @DataJpaTest — часть контекста, быстрее.
  • @SpringBootTest — весь контекст; кэшируется между тестами с одинаковой конфигурацией.
  • @MockitoBean (Spring Boot 3.4+) вместо устаревшего @MockBean.
  • Testcontainers и @ServiceConnection вместо H2.

Критерии освоения

Junior ≈ 4 ч

  • Пишет тесты контроллеров через @WebMvcTest и MockMvc

Практика. Покрыть контроллер заказов тестами MockMvc на успешные ответы и ошибки валидации.

Middle ≈ 6 ч

  • Пишет интеграционные тесты на Testcontainers с переиспользованием контейнеров
  • Подменяет бины через @MockitoBean и ускоряет тесты кэшированием контекста

Практика. Перевести интеграционные тесты с H2 на Testcontainers PostgreSQL и сократить время прогона за счёт общего контекста.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Чем unit-тест отличается от интеграционного?Junior

Unit-тест проверяет изолированную логику без внешних зависимостей (моки), быстро. Интеграционный — что компоненты правильно связаны между собой и с реальными системами: база, брокер, HTTP.

Полный разбор
Что проверяют контрактные тесты между сервисами?Middle

Контрактные тесты проверяют, что провайдер API не ломает ожидания потребителя: потребитель фиксирует, какие запросы делает и какие поля читает, провайдер в своей сборке проверяет, что выполняет все контракты.

Полный разбор
Что делает slice-тест вроде @WebMvcTest по сравнению с @SpringBootTest?Middle

@SpringBootTest поднимает весь контекст — медленно, но реалистично. Slice-тесты — узкий срез: @WebMvcTest (контроллеры, фильтры, MockMvc), @DataJpaTest (репозитории и база), @JsonTest. Зависимости среза подменяются моками.

Полный разбор
Почему интеграционные тесты на H2 вместо реальной СУБД считают ненадёжными?Middle

H2 — не та база, что в проде: другой диалект, типы, функции, блокировки и изоляция. Тест проходит на H2 и падает в PostgreSQL. Testcontainers поднимает настоящую базу в Docker на время тестов.

Полный разбор
Что верно про пирамиду тестов в Spring-приложении?Middle

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

Полный разбор
Как писать тесты в Spring Boot — @SpringBootTest и тестовые срезы?Junior

@SpringBootTest поднимает весь контекст приложения — для интеграционных тестов, медленно. Срезы поднимают только нужный слой: @WebMvcTest — контроллеры с MockMvc, @DataJpaTest — репозитории с базой, @JsonTest — сериализация. Зависимости слоя подменяют…

Полный разбор
Как протестировать REST-контроллер Spring с MockMvc?Junior

MockMvc выполняет запрос к контроллеру без настоящего HTTP-сервера, проходя через всю цепочку Spring MVC: маршрутизацию, сериализацию, валидацию, обработчики ошибок. Запрос строят perform(get(...)/post(...)) с телом и заголовками, проверяют status()…

Полный разбор
Чем unit-тест отличается от integration-теста?Junior

Unit-тест проверяет единицу логики изолированно: быстро, без БД и сети, зависимости заменены моками. Интеграционный проверяет связку компонентов с реальной инфраструктурой: БД, брокер, HTTP. Медленнее, но ловит ошибки стыков.

Полный разбор

Разборы темы

← Вся карта «Spring»

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

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

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

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