首页/开发/代码质量与评审速查/评审检查项:测试
代码评审64 条

评审检查项:测试

测试检查:新增行为是否有对应测试、测试能否失败、断言是否具体,以及改动对既有行为的回归是否有测试保护。

测试检查看什么

Google 评审指南把测试单独列为一档关注点:新增或改变的行为是否有测试覆盖、测试是否真的能失败、断言是否具体到能定位问题、修复缺陷时是否留下了能复现该缺陷的用例。测试是改动唯一的回归防线,评审时对它放水,等于把风险留给下一次上线。

基本信息

关注范围新增行为的覆盖、断言有效性、回归保护
有效性验证把断言改成相反期望,确认测试会变红
回归保护复现缺陷的用例纳入测试集并持续运行
豁免情形纯注释、纯格式、无行为变化的机械结构调整

逐项检查什么

  • 新增或修改的行为,关键路径是否有测试覆盖(含错误与边界分支)。
  • 测试真的能失败吗:断言是否具体,避免只断言「没有抛异常」。
  • 修缺陷是否先有能复现的用例:先红后绿才说明修复到位。
  • 用例名是否表达场景与期望,让失败信息本身就说明问题。
  • 是否动了既有断言:被放宽的断言往往掩盖了行为变化。

无效测试的典型形态

形态为什么无效
只断言不抛异常任何实现都通过,无法发现错误
断言与实现同源复用了同一处误解,改错也一起改对
覆盖率凑数永远不会失败的测试等于没有测试
大量 mock 断言调用顺序测的是调用细节,重构即碎

验证测试有效性

验证测试有效性
# 把断言期望改成错的值,确认测试变红
# 再改回来:若两条都绿,说明断言没有约束力
# 检查是否覆盖错误路径:只测成功分支不算完整
# 修缺陷的用例:先在没有修复的版本上跑一遍,必须是红的

要求补测试怎么说

  • 指明缺哪条路径:「错误分支没有用例」,而不是笼统要求「测试再全点」。
  • 说明为什么现在要补:该路径已经在线上出过问题,或改动直接改到它。
  • 给出可接受的最小范围:一条能失败的用例,好过十条无断言用例。
  • 机械重构不必强行要求新测试:既有测试已能验证行为不变。
Google 评审指南把测试单列一档:正确且有用的测试是评审重点,而不是附带项。
改动行为却只改实现不改测试,是测试类问题里最常见的隐患:旧断言被悄悄放宽,回归防线随之失效。

易错点

  • 改动行为却只改实现不改测试:旧断言被悄悄放宽,回归保护失效。
  • 追求覆盖率数字补无意义测试:永远不会失败的测试等于没有测试。
  • 只审测试是否通过而不看断言内容:通过与否无法说明是否正确。
  • 笼统要求「测试再全点」:作者补了一堆无用用例交差,真正缺口仍在。

数据来源与参考

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