检查 TestContainers 的内容

yee*_*epo 2 postgresql liquibase docker spring-boot testcontainers

我正在使用 PostgreSQL TestContainer 在 Spring Boot 中测试 Liquibase 模式迁移。我没有任何存储库。我想知道是否可以查看/访问 TestContainer 的内容,并测试架构迁移。

rie*_*pil 5

是的,您可以像访问任何其他 Docker 容器一样访问由 Testcontainers 生成的 Docker 容器。但是,对 Testcontainers 使用 JUnit 5 扩展或 JUnit 4 规则将在您的测试后关闭容器。

您可以使用Testcontainers 的容器重用功能(自 1.12.3 以来处于 alpha 状态)以确保您的容器在测试完成后启动并运行。

由于 Testcontainers 将在临时端口上启动容器,只需执行docker ps并检查容器端口映射到哪个本地端口即可。例如:

b0df4733babb        postgres:9.6.12      "docker-entrypoint.s…"   19 seconds ago      Up 18 seconds       0.0.0.0:32778->5432/tcp   inspiring_dewdney
Run Code Online (Sandbox Code Playgroud)

您现在可以localhost:32778使用例如 PgAdmin 或 IntelliJ IDEA 的数据库视图连接到您的数据库并检查您的数据库表。

访问凭据是您在测试中指定的凭据:

static PostgreSQLContainer postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
  .withDatabaseName("differentDatabaseName")
  .withUsername("duke")
  .withPassword("s3cret")
  .withReuse(true);
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,您还可以在测试结束时放置一个断点,调试测试并快速检查您的数据库。

更新:如果要验证架构的有效性,可以为此使用休眠功能:

spring.jpa.hibernate.ddl-auto=validate
Run Code Online (Sandbox Code Playgroud)

这将验证您的 Java 实体设置是否与应用程序启动时的底层数据库模式相匹配。您也可以将此添加到您的生产application.properties文件中,因为如果存在不匹配(例如缺少表、列),您的应用程序将不会启动。

为了使其在测试中工作,您需要使用@DataJpaTest或使用@SpringBootTest整个应用程序上下文连接到您的本地容器。

在此处查找更多信息。