如何为集成测试设置第二个远程数据库?
How do I set up a second remote database for integration testing?
我需要关于哪种方法更适合我的情况的建议。
我有一个带有 Spring 引导的 Java 应用程序,现在,对于测试部分,我使用本地主机 PostgreSQL 数据库。设置非常简单;我只有数据源。url/username/password 和 application.properties 文件中的端口设置。
现在,我需要使用远程 PostgreSQL 数据库进行特定的集成测试 class。所以,据我所知,我至少可以通过两种方式做到这一点:
我可以在 application.properties 中为远程数据库设置另一个配置,并在 class 和 environment.getProperty()
.
测试中使用它
或者,我可以创建一个 bean 来使用这些属性:
@Bean
public DataSource dataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.url(dbUrl);
dataSourceBuilder.username(username);
dataSourceBuilder.password(password);
return dataSourceBuilder.build();
}
事情并不像看起来那么简单。
我有一个 class 用于测试配置,ClassA.
我有第二个 class 实际测试,我们称之为 ClassB.
ClassB扩展了ClassA,ClassA启动了一个JAR文件,这是另一个Java应用程序,暴露了一些rest API,将进行测试来自 ClassB.
的测试
现在我使用的是本地数据库,但以后我想使用远程数据库。
我设法从具有 Maven 依赖项的 Artifactory 下载 JAR 文件,并在配置中 class 我搜索 JAR 文件,获取它的目录,并使用一组命令来 运行 它:{"java", "-jar", "directory.getCanonicalPath()}
,ProcessStreamer
处理它。
在我检查 JAR 文件启动并 运行ning 后,来自 ClassB 的测试被触发,它们对最近打开的应用程序进行 CRUD 操作,对 API 进行 REST 调用。
关于如何设置第二个远程数据库有什么建议吗?
谢谢!
既然你说你想同时使用两个数据库,我会为远程数据库创建一个单独的数据源:
@Configuration
public class MultipleDBConfig {
@Bean(name = "dbRemote")
@ConfigurationProperties(prefix = "spring.dbRemote")
public DataSource dbRemoteDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dbRemoteJdbcTemplate")
public JdbcTemplate jdbcTemplate(@Qualifier("dbRemote") DataSource dbRemote) {
return new JdbcTemplate(db1);
}
}
然后在您的 DAO/services:
中使用它们
@Autowired
@Qualifier("dbRemoteJdbcTemplate")
private JdbcTemplate dbRemoteTemplate;
如果您不能直接为该测试用例使用 JdbcTemplates,那么我建议使用 Spring 中的 RoutingDataSource。
我需要关于哪种方法更适合我的情况的建议。
我有一个带有 Spring 引导的 Java 应用程序,现在,对于测试部分,我使用本地主机 PostgreSQL 数据库。设置非常简单;我只有数据源。url/username/password 和 application.properties 文件中的端口设置。
现在,我需要使用远程 PostgreSQL 数据库进行特定的集成测试 class。所以,据我所知,我至少可以通过两种方式做到这一点:
我可以在 application.properties 中为远程数据库设置另一个配置,并在 class 和
测试中使用它environment.getProperty()
.或者,我可以创建一个 bean 来使用这些属性:
@Bean public DataSource dataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.url(dbUrl); dataSourceBuilder.username(username); dataSourceBuilder.password(password); return dataSourceBuilder.build(); }
事情并不像看起来那么简单。 我有一个 class 用于测试配置,ClassA.
我有第二个 class 实际测试,我们称之为 ClassB.
ClassB扩展了ClassA,ClassA启动了一个JAR文件,这是另一个Java应用程序,暴露了一些rest API,将进行测试来自 ClassB.
的测试现在我使用的是本地数据库,但以后我想使用远程数据库。
我设法从具有 Maven 依赖项的 Artifactory 下载 JAR 文件,并在配置中 class 我搜索 JAR 文件,获取它的目录,并使用一组命令来 运行 它:{"java", "-jar", "directory.getCanonicalPath()}
,ProcessStreamer
处理它。
在我检查 JAR 文件启动并 运行ning 后,来自 ClassB 的测试被触发,它们对最近打开的应用程序进行 CRUD 操作,对 API 进行 REST 调用。
关于如何设置第二个远程数据库有什么建议吗?
谢谢!
既然你说你想同时使用两个数据库,我会为远程数据库创建一个单独的数据源:
@Configuration
public class MultipleDBConfig {
@Bean(name = "dbRemote")
@ConfigurationProperties(prefix = "spring.dbRemote")
public DataSource dbRemoteDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dbRemoteJdbcTemplate")
public JdbcTemplate jdbcTemplate(@Qualifier("dbRemote") DataSource dbRemote) {
return new JdbcTemplate(db1);
}
}
然后在您的 DAO/services:
中使用它们@Autowired
@Qualifier("dbRemoteJdbcTemplate")
private JdbcTemplate dbRemoteTemplate;
如果您不能直接为该测试用例使用 JdbcTemplates,那么我建议使用 Spring 中的 RoutingDataSource。