工程习惯、质量与团队 · 综合
测试:多少、哪些、哪些不值得
一句话: 把大部分投入放在跑你自己逻辑的测试上,少量放在集成测试上,极少量放在端到端测试上。
三层
单元测试。快、聚焦、每次保存都跑。大部分回报在这里。
集成测试。对着真实数据库和真实队列跑。它抓的是单元测试漏掉的东西——表结构、事务、查询。
端到端测试。昂贵而脆弱。只留给五到十五条关键路径。
什么值得测
带边界情况的业务逻辑、计算、权限,以及所有曾经坏过一次的地方。每一个被修复的bug都配一个测试——这样覆盖率会长在正确的地方,而不是按百分比长。
不值得的:只做数据搬运的代码,以及mock得太多、最后测的是mock而不是系统的测试。
测试本身的质量
好的测试因为一个清晰的原因而失败,并直接说出是什么坏了。不稳定的测试比没有测试更糟——它会教会团队无视红色。
深入一层
把每次推送都跑的快测试,和夜间跑的重型测试套件分开。当一个测试时好时坏时,把它当作高优先级的bug来处理——容忍不稳定,会在几个月里抹掉整套测试的全部价值。