testcontainers-go 是 Go 的集成测试库,可在测试中启动数据库、消息队列、浏览器等任何可运行于 Docker 容器的轻量一次性实例,避免 mock 外部依赖。
主要能力:提供 62+ 预配置模块,覆盖数据库(postgres、mysql、mongodb、redis 等)、消息队列(kafka、rabbitmq、nats 等)、搜索与向量库、云与基础设施、开发工具等分类;模块自带合理默认值、凭据自动生成,并提供 ConnectionString()、Endpoint() 等连接辅助方法及模块特有功能,如 Postgres 快照与恢复、Kafka 获取 brokers。无模块时可用通用容器,通过 WithExposedPorts、WithEnv、WithFiles、WithWaitStrategy 等选项配置。支持自定义网络实现多容器互通、按别名与内部端口通信;支持并行测试、表驱动测试(可测多版本依赖)。
使用方式:安装 go get github.com/testcontainers/testcontainers-go,模块按 github.com/testcontainers/testcontainers-go/modules/<name> 引入。推荐用模块而非通用容器;使用 WithExposedPorts 时必须配置等待策略(如 wait.ForListeningPort),不要用 time.Sleep。启动容器后应立即调用 testcontainers.CleanupContainer(t, ctr) 注册清理,再检查错误,避免资源泄漏。此外可用 testcontainers.CleanupNetwork 清理网络,并可通过 Ryuk 边车容器在测试崩溃时自动回收资源。
适用场景:需要真实依赖的集成测试、多版本或多种配置的依赖测试、可复现测试环境与临时测试基础设施。
限制与前提:需安装并运行 Docker 或 Podman,Go 版本以项目 go.mod 要求为准(资料提及 Go 1.24+),需可访问 Docker socket。资料未提供具体收费、价格信息,部分模块细节与完整示例需参考官方模块文档与仓库。