Ответ
Для изоляции unit-тестов от внешней инфраструктуры БД используйте следующие подходы:
1. In-memory базы данных
- H2 или SQLite — работают в оперативной памяти, не требуют установки.
- Пример настройки H2 в Spring Boot тесте:
@DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @TestPropertySource(properties = { "spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1", "spring.datasource.driver-class-name=org.h2.Driver" }) public class RepositoryTest { @Test public void testUserRepository() { // ... тестовые операции с БД } }
2. Mocking слоя доступа к данным
- Используйте Mockito для заглушек репозиториев или DAO, чтобы не обращаться к реальной БД.
3. Testcontainers
- Запускает реальные СУБД (PostgreSQL, MySQL) в Docker-контейнерах. Интегрируется с JUnit.
@Testcontainers public class IntegrationTest { @Container static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:13"); // ... использование контейнера в тестах }
Ключевой принцип: тесты должны быть быстрыми, воспроизводимыми и не зависеть от состояния внешних систем.