Sobes.tech
Junior — Middle

Birim testleri yazarken yerel makineye veritabanı kurulumu mümkün değilse hangi yaklaşımlar ve çözümler kullanılabilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

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

  • Использование 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;
    }
}