引言
经常有人问这样的问题:“我们在做单元测试,那测试覆盖率要到多少才行?”。答案其实很简答,“作为指标的测试覆盖率都是没有用处的。”
Martin Fowler(重构那本书的作者)曾经写过一篇博客来讨论这个问题,他指出:把测试覆盖作为质量目标没有任何意义,而我们应该把它作为一种发现未被测试覆盖的代码的手段。
代码覆盖率的意义
· 分析未覆盖部分的代码,从而反推在前期测试设计是否充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?需求/设计不够清晰,测试设计的理解有误,工程方法应用后的造成的策略性放弃等等,之后进行补充测试用例设计。
· 检测出程序中的废代码,可以逆向反推在代码设计中思维混乱点,提醒设计/开发人员理清代码逻辑关系,提升代码质量。
· 代码覆盖率高不能说明代码质量高,但是反过来看,代码覆盖率低,代码质量不会高到哪里去,可以作为测试自我审视的重要工具之一。
代码覆盖率的种类
代码覆盖率工具将使用一个或多个标准来确定在执行测试套件期间您的代码是如何执行的。覆盖率报告中的常见指标包括:
函数覆盖率:已定义的函数中有多少被调用。
语句覆盖率:程序中有多少语句已执行。
分支覆盖率:控制结构的分支(例如 if 语句)中有多少已执行。
条件覆盖率:已经测试了多少布尔子表达式的真值和假值。
行覆盖率:已经测试了多少行源代码。
这些指标通常表示为实际测试的项目数量、代码中找到的项目以及覆盖率百分比(测试的项目/找到的项目)。
在IDEA中查看代码覆盖率
编写好测试类,启动时选择“使用覆盖率运行”
然后在覆盖率面板就会有数据统计
在IDEA中查看分支覆盖率
在配置中勾选“启用分支覆盖率并测试跟踪”:
在IDEA中查看代码覆盖情况
在启动时选择“使用覆盖率运行”之后,点击覆盖面板的被测试类:
然后会跳转到相应类,左边绿色表示覆盖了的: