java - 如何为集成测试设置第二个远程数据库?
问题描述
我需要关于哪种方法更适合我的情况的建议。
我有一个带有 Spring Boot 的 Java 应用程序,现在,对于测试部分,我使用 localhost PostgreSQL 数据库。设置非常简单;我只是在 application.properties 文件中有 datasource.url/username/password 和端口设置。
现在,我需要为特定的集成测试类使用远程 PostgreSQL 数据库。所以,据我所知,我至少可以通过两种方式做到这一点:
我可以在 application.properties 中为远程数据库设置另一个配置,并在测试类中使用它
environment.getProperty()
。或者,我可以制作一个 bean 来使用这些属性:
@Bean public DataSource dataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.url(dbUrl); dataSourceBuilder.username(username); dataSourceBuilder.password(password); return dataSourceBuilder.build(); }
事情并不像看起来那么简单。我有一个用于测试配置的类ClassA。
我有第二节课进行实际测试,我们称之为ClassB。
ClassB 扩展了 Class A,ClassA 启动了一个 JAR 文件,这是另一个暴露了一些 REST API 的 Java 应用程序,这些 API 将使用 ClassB 的测试进行测试。
现在我使用本地数据库,但将来我想使用远程数据库。
我设法从带有 Maven 依赖项的 Artifactory 下载 JAR 文件,并在配置类中搜索 JAR 文件,获取它的目录,并使用一组命令来运行它:{"java", "-jar", "directory.getCanonicalPath()}
和ProcessStreamer
处理它。
在我检查 JAR 文件是否启动并运行后,会触发 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/服务中使用它们:
@Autowired
@Qualifier("dbRemoteJdbcTemplate")
private JdbcTemplate dbRemoteTemplate;
如果您不能直接将 JdbcTemplates 用于该测试用例,那么我建议您使用 Spring 中的 RoutingDataSource。
推荐阅读
- javascript - 带有 cookie 的 JS 预选下拉选项创建不可见的下拉选项
- r - 如何在 MLR 包中使用 Leave one out 调整分类阈值?
- excel - Excel VBA匹配不同工作簿上的标题名称并将列复制到主工作簿
- excel - 输出到 csv 时的 Powershell 奇怪行为
- c - 任何人都可以在 c 中为我简化此代码吗?
- mysql - SQL 插入到表中。有值 =(插入前的值)+ 一个数字(例如 1000)
- here-api - HERE Maps matchLevel 参数不起作用
- google-sheets - 从 Google Sheet 中的 QUERY 函数更改列的格式
- opl - 答案不符合约束条件
- android-studio - Android Studio:编写一个构建任务,以便在运行时通过其名称可访问的 declare-stylable 中的 enum-formatted attr 中获取枚举