Junior — Middle
Quelles approches et solutions peuvent être utilisées si l'installation d'une base de données sur la machine locale est impossible lors de l'écriture de tests unitaires?
sobes.tech IA
Réponse de l'IA
Если установка базы данных на локальной машине невозможна при написании юнит-тестов, можно использовать следующие подходы:
- Использование 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;
}
}