测试报告显示所有语句都执行过,团队仍可能遗漏一种业务结果。问题在于,“这一行到过没有”和“从这一行出发走过哪些方向”并不是同一个问题。阅读覆盖报告前,先确认报告采用的是哪种度量。
Coverage.py 7.14.1的分支覆盖说明,将可能跳往多个后续行的位置纳入检查,并比较实际发生的跳转与可能的跳转。启用分支测量需要使用--branch;HTML报告会标记未覆盖完整的分支,并给出没有走到的目标行号。[1]
用一个自行构造的场景理解
假设运费函数先给变量设定普通运费,如果用户是会员,就把它改为会员运费,最后返回变量。一个会员用例可能已经经过初始化、条件判断、赋值与返回这些语句。但非会员路径仍没有执行,测试还没有证明普通运费会按预期返回。这个例子是本文为解释度量而构造的,不是某家电商真实程序或故障记录。
补测试时先写预期,再看比例
针对这一遗漏,可补充非会员输入,并核对返回结果与约定是否一致。只让代码走到某一行而不检查结果,即使提高了覆盖比例,也没有回答业务是否正确。覆盖提示的作用,是帮助找到待审查路径;测试断言才表达这条路径应产生什么结果。
对缺失分支做有理由的分类
看到报告标黄后,可以分别记录正常业务遗漏、异常输入遗漏、由环境决定的路径以及确有理由不会走到的路径。记录应包含具体条件与判断依据。不要因为影响报表数字,就直接给代码加排除标记。官方文档确实说明了排除与部分分支处理,但本文没有据此判断读者的任一分支可以被忽略。[1]
审查结果最好能回答三个问题:为什么存在这条路径,测试用什么输入到达它,以及怎样确认结果。覆盖率没有代替这些问题,也没有证明程序不存在错误。本篇只讨论指定版本文档中的度量含义;实际工具配置、插件与执行环境仍需在项目中核对。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。