我的Spring应用程序具有自己的持久性数据库。 同一应用程序需要将临时查询发送到外部数据库。 查询由用户提供。
是否可以利用弹簧测试容器来测试此功能? 我的目标是:
我看到了许多针对测试容器对App本身进行测试的示例,但是我可以启动容器而不将其作为App持久性数据库插入吗?
答案 0 :(得分:2)
我可以只启动容器而不将其作为App Persistence DB插入吗?
是的,这完全有可能。 测试容器本身与Spring或Spring Boot无关。
您将要做的是:
DataSource
DataSource
进行测试。Spring Data JDBC正是这样做来针对各种数据库运行测试。 我最后添加了the class doing that for 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;");
}
}