使用 Testcontainers 和容器化数据库对 Go 应用进行集成测试

主要观点

  • 集成测试存在如何在不管理外部服务复杂性的情况下针对真实依赖项进行测试的挑战,传统方法存在缺陷。
  • Testcontainers 能优雅地解决此问题,通过在测试套件中直接运行数据库等服务的轻量级实例来进行测试。
  • 以 Go 语言的 testcontainers-go 为例,介绍其在集成测试中的应用,通过与 Azure Cosmos DB 模拟器结合进行实践。

关键信息

  • Testcontainers 可在测试套件中直接运行各种服务的容器,运行后自动清理,保持隔离和可重复性。
  • 以 Go 应用与 Azure Cosmos DB 模拟器结合为例,展示 testcontainers 的工作流程,包括容器设置、测试执行和清理三个阶段。
  • TestMain 函数作为测试套件的入口点,控制整个测试执行生命周期。
  • 设置 Cosmos DB 模拟器时需定义容器请求,包括镜像、暴露端口、等待条件和环境变量等。
  • 连接到模拟器时需处理自签名证书等问题。
  • 测试执行后进行数据播种,测试结束后清理容器。

重要细节

  • 有两种 Cosmos DB 模拟器版本,示例中使用了 Linux 版模拟器(预览版)。
  • 运行测试前需确保 Go 安装且 Docker 运行,拉取 Cosmos DB 模拟器镜像并克隆仓库运行测试。
  • 测试输出显示了 testcontainers orchestrate 的三个阶段的详细过程。
  • 代码中展示了设置测试环境、连接模拟器、测试执行和清理等关键部分的具体实现。
  • 尽管 Cosmos DB 模拟器在本地开发测试中很强大,但不支持全服务的所有功能,需注意差异。
  • 完整示例代码在 GitHub 仓库中,testcontainers-go 文档提供更多指导。
阅读 11
0 条评论