09 | 测试覆盖率:如何找出没有测试到的代码?
郑晔
你好,我是郑晔!
经过前面内容的介绍,相信你现在已经知道如何去编写单元测试了。上一讲,我们说编写单元测试应该面向接口行为来编写,不过这样一来,就存在一种可能:我预期的行为都对了,但是因为我在实现里写了一些预期行为之外的东西(比如有一些分支判断),在代码实际执行的时候,可能就会出现预期之外的行为。
如何尽可能消除预期之外的行为,让代码尽在掌控之中呢?这一讲,我们就来讲讲如何查缺补漏,找到那些测试没有覆盖到的代码。我们要来讨论一下测试覆盖率。
测试覆盖率
测试覆盖率是一种度量指标,指的是在运行一个测试集合时,代码被执行的比例。它的一个主要作用就是告诉我们有多少代码测试到了。其实更严格地说,测试覆盖率应该叫代码覆盖率,只不过大多数情况它都是被用在测试的场景下,所以在很多人的讨论中,并不进行严格的区分。
既然测试覆盖率是度量指标,我们就需要知道有哪些具体的指标,常见的测试覆盖率指标有下面这几种:
函数覆盖率(Function coverage):代码中定义的函数有多少得到了调用;
语句覆盖率(Statement coverage):代码中有多少语句得到了执行;
分支覆盖率(Branches coverage):控制结构中的分支有多少得到了执行(比如 if 语句中的条件);
条件覆盖率(Condition coverage):每个布尔表达式的子表达式是否都检查过 true 和 false 的不同情况;
行覆盖率(Line coverage):代码中有多少行得到了测试。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何利用测试覆盖率工具来发现未被测试到的代码,从而提高代码质量和测试覆盖的全面性。作者以JaCoCo为例,详细介绍了如何使用测试覆盖率工具来实现对代码覆盖率的监测和分析。通过设置相应的指标和配置,可以对代码的覆盖率进行监控和要求,帮助开发人员找出未被测试到的代码部分。文章还提到了在实际项目中,测试覆盖率通常会与项目的自动化过程结合起来,以实现对代码覆盖率的自动化监测和管理。通过本文的介绍,读者可以了解到如何通过测试覆盖率的报告找到未覆盖的代码,定位问题并补齐测试。最后,强调了将测试覆盖率的检查加入到自动化过程中的重要性。整体而言,本文深入浅出地介绍了测试覆盖率的重要性和实际应用,对于开发人员和项目质量管理者具有一定的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的测试课》,新⼈⾸单¥59
《程序员的测试课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- sylan215从白盒测试的角度看,代码覆盖率是必然要做的事情。 代码覆盖率可以从不同的角度来划分为函数覆盖率、语句覆盖率、分支覆盖率、条件覆盖率和行覆盖率。 对于 Java 而言,可以使用的工具有 JaCoCo、Emma 和 Cobertura。 如果是 Python,可以用 coverage。 其他语言的话,也有一些对应的工具可以使用。 一定要记住,代码覆盖率越高,并不能说明质量就越好,但是代码覆盖率很低,那么质量的风险肯定高。 以上,期待后续的精彩内容。
作者回复: 感谢补充
2021-09-0711 - 浩仔是程序员如果不是基于细节 又怎么可以知道所有分支都可以覆盖到
作者回复: 重点就是先基于接口,再通过覆盖率发现没有覆盖到地方,而不是基于细节。
2021-10-0133 - davix這篇太Java了
作者回复: 总要有一个落地的例子😄
2021-08-232 - 王十一既然强调测试覆盖率,那测试还必须得照顾实现细节来做对吧?那这是不是跟测试应该基于接口行为来有所矛盾呢
作者回复: 不矛盾,你只要想明白很多影响测试覆盖的细节,实际上是设计概念的缺失,就知道测试在驱动我们得到更好的设计。
2021-08-241 - 花花大脸猫有用到,也是jacoco,用在ci的流程,目前设置了代码重复率与单元测试覆盖率指标,分别是5%与80%,目前对于单测的要求比较高,但是对于老师说的100%来说,确实有点难度,因为贫血模型外加util以及配置类会降低指标。2022-04-1212
- aoe100%测试覆盖率很强!2021-11-112
- ifelse将测试覆盖率的检查加入到自动化过程之中。--记下来2022-06-091
收起评论