【问题标题】:Examining contents of TestContainers检查 TestContainers 的内容
【发布时间】:2020-11-20 17:59:08
【问题描述】:

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

【问题讨论】:

    标签: postgresql spring-boot docker liquibase testcontainers


    【解决方案1】:

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

    您可以将 coontainer re-usability feature 用于测试容器(自 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
    

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

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

    static PostgreSQLContainer postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer()
      .withDatabaseName("differentDatabaseName")
      .withUsername("duke")
      .withPassword("s3cret")
      .withReuse(true);
    

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

    更新:如果您想验证架构的有效性,您可以为此使用 Hibernate 功能:

    spring.jpa.hibernate.ddl-auto=validate
    

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

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

    查找更多信息here

    【讨论】:

    • 谢谢!有没有办法编写显式的 junit 测试来测试模式的有效性?
    • 我已经用可能的解决方案更新了我的答案来验证您的架构
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2019-12-15
    • 2014-04-07
    • 2020-08-14
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多