知识卡片
测试用真实容器而非内存数据库
内容
本地开发和测试图方便常用 H2 这类内存数据库替代生产用的 PostgreSQL,但即使都讲 SQL、Spring Data 提供了统一抽象,每个数据库厂商的方言和特性差异依然真实存在,测试用的数据库和生产不是同一款,等于给”这段代码在生产到底能不能跑”这个问题留了一个测不出来的盲区。Testcontainers 把这个问题解决掉的方式是让集成测试直接对着一个临时启动、测完即焚的真实 PostgreSQL 容器跑,而不是某种”看起来差不多”的替代品。这本质是把[[环境对等的三个鸿沟]]里的”工具鸿沟”从”开发环境 vs 生产环境”延伸到了”测试环境 vs 生产环境”——持续交付要求每次提交都是潜在的可发布候选,如果连自动化测试都没有真实覆盖到生产会用的技术栈,流水线跑绿也不能真正说明什么。发散:这提示一个更通用的原则——”图方便的替代品”节省的时间,往往只是把发现问题的时间点推迟到了成本更高的阶段(测试变绿但生产出问题),而不是真的省掉了这个成本。
参考来源
《Cloud Native Spring in Action》第5章《Persisting and managing data in the cloud》