【发布时间】:2019-02-11 17:43:59
【问题描述】:
我需要关于哪种方法更适合我的情况的建议。
我有一个带有 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 的测试进行测试。
现在我使用本地数据库,但将来我想使用远程数据库。
我设法从 Artifactory 下载了带有 Maven 依赖项的 JAR 文件,并在配置类中搜索了 JAR 文件,我得到了它的目录,并使用一组命令来运行它:{"java", "-jar", "directory.getCanonicalPath()},和ProcessStreamer 处理它。
在我检查 JAR 文件是否启动并运行后,会触发 ClassB 的测试,它们会对最近打开的应用程序执行 CRUD 操作,从而对 API 进行 REST 调用。
关于如何设置第二个远程数据库的任何建议?
谢谢!
【问题讨论】:
-
这似乎有点复杂,我不确定如何解决您的确切问题。但我可以建议您考虑使用 Docker 进行这种类型的集成测试;同时启动您的其他 Rest API 应用程序和您的辅助 PostgresDB。您可以通过Spotify 使用 Docker Java 客户端从您的测试类中启动和拆除您的依赖组件。
标签: java postgresql spring-boot integration-testing urlconnection