Могу ли я просто запустить контейнер без подключения к нему как БД персистентности приложения?
Да, это вполне возможно. Testcontainers сам по себе не имеет ничего общего с Spring или Spring Boot.
Что бы вы сделали:
- выберите контейнер, который вы хотите использовать (разные контейнеры для разных баз данных
- создать экземпляр контейнера
- запустить его
- построить из него
DataSource
- Использовать это
DataSource
для своих тестов.
Spring Data JDB C делает именно это для запуска тестов с различными базами данных. В конце я добавляю класс, делающий это для MySQL. Это конфигурация контекста приложения Spring, но вы могли бы поставить что в JUnit before метод, правило JUnit 4 или расширение JUnit 5 или просто обычный метод, который вы вызываете в начале теста.
@Configuration
@Profile("mysql")
class MySqlDataSourceConfiguration extends DataSourceConfiguration {
private static final MySQLContainer MYSQL_CONTAINER = new MySQLContainer().withConfigurationOverride("");
static {
MYSQL_CONTAINER.start();
}
/*
* (non-Javadoc)
* @see org.springframework.data.jdbc.testing.DataSourceConfiguration#createDataSource()
*/
@Override
protected DataSource createDataSource() {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl(MYSQL_CONTAINER.getJdbcUrl());
dataSource.setUser(MYSQL_CONTAINER.getUsername());
dataSource.setPassword(MYSQL_CONTAINER.getPassword());
dataSource.setDatabaseName(MYSQL_CONTAINER.getDatabaseName());
return dataSource;
}
@PostConstruct
public void initDatabase() throws SQLException, ScriptException {
ScriptUtils.executeSqlScript(createDataSource().getConnection(), null, "DROP DATABASE test;CREATE DATABASE test;");
}
}