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

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

MiddleТестирование Spring BootTestcontainersSpring BootSpring Boot >=3.1
Ещё спрашивают так:
  • Зачем Testcontainers в тестах Spring?
Коротко

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

  • Spring Boot 3.1+: @ServiceConnection — настройки подключения подставляются автоматически
  • Переиспользование контейнера между тестами — быстро
  • Те же контейнеры для Kafka, Redis, RabbitMQ

А ещё Миграции (Flyway, Liquibase) проверяются тем же тестом

Подробно

Режим совместимости у H2 приближает синтаксис, но не воспроизводит поведение: нативные запросы с особенностями PostgreSQL, JSON-типы, оконные функции, upsert, семантика уровней изоляции и блокировок, работа последовательностей — всё это способно разойтись. В результате тест даёт ложную уверенность, а ошибка обнаруживается в production. Testcontainers решает проблему радикально: тест поднимает в Docker ту же версию СУБД, что и в бою. Цена — необходимость Docker в окружении сборки и время старта контейнера, которое снижают переиспользованием контейнера между тестами и общим для всего набора экземпляром. Тот же подход применяют к Kafka, Redis и другим зависимостям.

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

  • Почему H2 не проверяет реальное поведение.
  • Testcontainers и @ServiceConnection.

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

  • Проверять на H2 миграции, написанные под конкретную СУБД.
  • Поднимать новый контейнер на каждый тестовый класс вместо переиспользования.

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

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗H2 работает медленнее реальной базы, и тесты не укладываются в таймауты CI
  • ✗H2 не поддерживает транзакции
  • ✗H2 несовместим с Spring Data JPA
  • ✓Диалект, типы и блокировки не как в боевой СУБД — тест зелёный, а в бою падает

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

  • Как сократить время старта контейнеров в наборе тестов?
  • Где H2 всё-таки уместен?

Разбор темы

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

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

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

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

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