Нужно ли разработчику локально устанавливать СУБД для модульного тестирования?

«Нужно ли разработчику локально устанавливать СУБД для модульного тестирования?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, это не требуется и часто нежелательно. Для модульных (unit) тестов рекомендуется использовать изолированные, быстрые решения, не зависящие от внешней инфраструктуры.

Основные подходы:

  1. In-memory базы данных (например, H2, SQLite).
  2. Mock-объекты (например, с помощью Mockito) для имитации слоя доступа к данным.

Пример настройки H2 для тестов Spring Boot:

# application-test.yml
spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=PostgreSQL
    driver-class-name: org.h2.Driver
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect

Преимущества:

  • Скорость: Тесты выполняются в оперативной памяти.
  • Изоляция: Нет зависимостей от внешней установленной СУБД.
  • Повторяемость: Одинаковое окружение на всех машинах и в CI/CD.
  • Простота: Не требует администрирования.

Для интеграционных тестов, где нужна реальная СУБД, используйте Testcontainers, который запускает базу в Docker-контейнере.