【发布时间】:2020-02-06 20:33:49
【问题描述】:
我正在测试一个 Spring Boot 应用程序并尝试使用 Testcontainers 在 Docker 容器中为 JUnit 5 测试启动一个临时数据库。有two ways to tell Testcontainers to launch and connect to a test database container:
通过在测试类中定义容器,添加至少几个注解,并且(在 Spring Boot 测试中)还使用几行代码覆盖应用程序上下文以将其指向新数据库。对于每个测试类,这是相当多的额外代码。
通过将
spring.datasource.url属性设置为经过特殊修改的 URL。最优雅的方法虽然可以说是一个缺点,但它会使测试不太清楚地了解正在发生的事情。
我想使用选项 #2,但限制(我认为)是它要求您使用 PostgreSQL(或任何数据库)的标准(空)“库”映像。我有一个自定义数据库映像,它有自己的 Dockerfile。特别是该图像包含许多初始化脚本(不仅仅是一个)来构建数据库模式。
有什么方法可以将 Testcontainers 的 JDBC URL 配置与自定义 Postgres 图像一起使用?我更愿意将其指向 Dockerfile 并让 Testcontainers 动态生成图像,但我也可以接受我预先构建数据库映像并告诉 Testcontainers 从 Docker Hub 中提取它的解决方案。
作为参考,我的代码在 Github 上的 joeclark-phd/granite 上,而有问题的 Dockerfile 位于“数据库”目录 here 中。一个示例测试用例是AgencyControllerIntegrationTest.java,如果我采用 JDBC URL 方法,您可以看到至少有 15 行代码可以消除。
【问题讨论】:
-
您能否提供一个 Dockerfile 或告诉我们您使用的是什么基础镜像?您是否使用 docker-compose 文件来执行此操作?
-
@Stefano 我在 Github 上添加了一些代码和 Dockerfile 的链接
标签: spring-boot docker testcontainers