首页/开发/代码质量与评审速查/评审中要求补测试的时机
代码评审64 条

评审中要求补测试的时机

遇到行为变化无测试、修复无复现用例、关键分支无覆盖三种情况应要求补测试;纯注释、纯格式与无行为变化的机械重构可豁免。

什么时候要求补测试

有三类情况应当明确要求补测试:行为发生变化却没有对应测试、修复缺陷却没有能复现该缺陷的用例、关键分支(错误路径与边界)完全没有覆盖。反过来,纯注释、纯格式以及没有行为变化的机械重构可以豁免——对它们强行要求测试只会浪费精力。

基本信息

要求前提改动改变了可观察行为,或修复了具体缺陷
范围要求指明缺哪条路径,而不是笼统要求「测试再全点」
豁免情形纯注释、纯格式、无行为变化的机械重构
验收标准新增用例在没有修复的版本上必须失败

必须要求的情形

  • 行为变化没有新测试:要求补,并确认测试在改错时能失败。
  • 缺陷修复没有复现用例:先加能复现的测试,再谈合并。
  • 关键分支未覆盖:错误路径、边界值、权限拒绝等路径至少各一条。
  • 修复的是线上问题:把复现步骤固化成用例,防止回归。

可以豁免的情形

  • 纯注释与文档更新:行为未变,测试无法验证新增信息。
  • 纯格式化或改名:既有测试已能证明行为不变。
  • 无行为变化的机械重构:把重点放在确认行为确实没变。
  • 仅调整日志文本但监控未依赖该文本:可作为例外,但要在评论里说明判断依据。

要求方式对比

写法效果
「加一下测试」作者不知从哪下手,可能补无用用例
「错误分支没有用例,请补一条返回空输入的」目标明确,可立即执行
「把线上复现步骤写成用例」既防回归,又留下问题记录
不说明理由直接拒绝作者感受为刁难,讨论容易升级
要求补测试时给出范围:只说「加测试」会让作者不知道从哪下手,最后补出一堆无效用例。
验收时把断言改成相反期望跑一遍:如果仍然绿灯,说明这条用例还没有约束力。

易错点

  • 笼统要求测试再全点:作者补了无意义测试交差,真正的缺口仍在。
  • 对机械性重构强行要求测试:浪费精力,现有测试已能验证行为不变。
  • 接受永远会通过的用例:看似有覆盖,实际没有任何保护作用。
  • 要求补测试但不说不补的后果:作者按非阻塞处理,改动带着缺口合入。

数据来源与参考

  • Google Engineering Practices · What to look for in a code review(Tests)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌