【问题标题】:Is it possible to use Testcontainers on Spring (non Boot)?是否可以在 Spring(非 Boot)上使用 Testcontainers?
【发布时间】:2021-03-03 01:43:49
【问题描述】:

我正在为有点旧的应用程序设计集成测试,但我面临的问题是我有一个服务我只想用于一次集成测试。

该应用程序包含多个模块、4 个弹簧(非启动)应用程序,这些应用程序正在使用这些服务:

  • PostgreSQL 数据库
  • RabiitMQ 实例
  • ElasticSearch 实例

整个堆栈目前通过 docker-compose 进行 docker 化(因此使用 docker-compose up 整个应用程序启动,创建数据库架构等)。

我想通过测试容器来实现这一点。所以启动 PostgreSQL 容器,我在其中运行 flyway 脚本来创建模式和完整的数据库,其中包含运行所需的数据(其他数据将在单独的测试中添加),然后启动 RabbitMQ,然后启动 ElasticSearch 实例。

每次集成测试运行时,所有这些都会自动运行。

这甚至可以使用“旧版”Spring(非 Boot)吗? 这是否可以自动化它可以在一台服务器上运行多次的过程(因此不会有任何端口冲突)。目标是在提交合并请求后在 sobe Git 存储库上运行它,以检查所有集成测试是否通过。

感谢您的建议。

【问题讨论】:

    标签: java spring testing integration-testing testcontainers


    【解决方案1】:

    Testcontainers 从一开始就完全独立于 Spring,实际上据我所知,最近才添加了一些与 Spring Boot 集成的王者。

    有几种方法可以实现这一点,最简单的方法是创建一些容器作为测试类字段,如here [1] 所述

    是的,可以在没有冲突的情况下实现这一点,请阅读here。简而言之 - Testcontainers 在随机主机端口上公开容器的端口(对于 Postgres 的 ex 5432)以避免冲突,您可以获得文章中描述的实际端口。对于 JDBC 容器,它甚至可以是 easier

    我没有亲自使用过 RabbitMQ 和 ElasticSearch,但是有一些模块,你可以在文档中阅读。

    附:也可以为此使用 Docker Compose 支持,但我找不到任何理由,仅供参考,上面的方法更简单。

    [1] @Testcontainers 注释将为您启动它们,但您也可以manually 管理容器生命周期。

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 2022-06-30
      • 2021-12-22
      • 1970-01-01
      • 2016-10-26
      • 2019-10-21
      • 2021-01-16
      • 2019-01-03
      • 2015-02-02
      相关资源
      最近更新 更多