Sobes.tech
Junior — Middle
77

Какие подходы и решения можно использовать, если установка базы данных на локальной машине невозможна при написании юнит-тестов?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Если установка базы данных на локальной машине невозможна при написании юнит-тестов, можно использовать следующие подходы:

  • Использование in-memory баз данных — например, H2, HSQLDB или SQLite в памяти. Они быстро запускаются и не требуют установки.
  • Моки и стабы — создавать имитации объектов доступа к базе данных, чтобы тестировать логику без реального подключения.
  • Контейнеризация — запускать базу данных в Docker-контейнере, что не требует установки на хост-машину.
  • Использование специализированных библиотек для тестирования — например, Testcontainers для Java, которые автоматически поднимают нужные сервисы.

Пример использования H2 в памяти с JUnit:

import org.junit.jupiter.api.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class DatabaseTest {
    @Test
    public void testWithInMemoryDb() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1");
        dataSource.setUsername("sa");
        dataSource.setPassword("");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        jdbcTemplate.execute("CREATE TABLE users(id INT PRIMARY KEY, name VARCHAR(255))");
        jdbcTemplate.update("INSERT INTO users VALUES(1, 'Alice')");

        Integer count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM users", Integer.class);
        assert count == 1;
    }
}