仅为它编写一个测试

主要观点:作者通过在 Rust 项目 bors 中的经历,强调 Rust 引导其做“正确的事”,并讲述了修复 SQL 迁移导致的 bot 部署问题及后续采取的措施。
关键信息:

  • Google Summer of Code 2025 临近,众多新贡献者向 Rust 项目发送 pull 请求,bors 是其中热门项目
  • 作者审查并合并了 bors 的数十个 PR,但发现一些 PR 导致 bot 部署出错。
  • 问题出在一个 SQL 迁移语句ALTER TABLE foo ADD COLUMN bar NOT NULL;,未给已有行提供默认值。
  • 现有测试套件未检测到该问题,因为它从空数据库开始。
  • 作者在 bors 开发指南中添加警告,敦促人们不要这样写迁移,但意识到仅靠文档效果不佳。
  • 借助sqlparser crate 编写集成测试,遍历migrations目录,解析 SQL 文件并检测添加NOT NULL列而无默认值的情况。
  • 测试代码简单有效,约 10 分钟从思考能否解析 SQL 到得到工作测试,仅使用之前未用过的 crate 且未读太多文档。
  • 修复和测试在此 PR中,还考虑了其他测试方法。
    重要细节:
  • sqlparser crate 仅约有三个小依赖,编译快,支持Visitor模式使实现容易。
  • 测试代码通过遍历migrations目录下的 SQL 文件,解析并检查NOT NULL列无默认值的情况。
  • 作者提到自己的编程经验让其尽量避免类似问题再次发生,且对在 Rust 中能轻松做到这些感到惊讶。
  • 最后鼓励人们遇到问题时尝试写测试,即使起初觉得麻烦。
阅读 8
0 条评论