10 | 为什么 100% 的测试覆盖率是可以做到的?
- 深入了解
- 翻译
- 解释
- 总结
这篇文章深入探讨了如何实现100%的测试覆盖率,强调了其重要性以及对自己编写的代码进行全面测试的必要性。作者指出,100%的测试覆盖率并不意味着代码没有问题,而是程序员对自己编写代码的一种质量保证。为了实现这一目标,文章提出了一些具体做法,包括良好的软件设计和编码习惯、测试和代码同步编写、以及对影响测试覆盖的第三方代码进行隔离等。此外,文章还强调了隔离层的重要性,并提出了一些实现100%测试覆盖率的技术要求。总的来说,本文对于想要了解如何实现100%测试覆盖率的读者来说,具有一定的参考价值。
《程序员的测试课》,新⼈⾸单¥59
全部留言(17)
- 最新
- 精选
- 码农Kevin亮请教老师,我正好遇到这么一个现实问题: getter/setter我理解是不需要测的,如果为了达到100%覆盖的目标,意味着需要单独把充血实体类拆成贫血实体与业务操作两个类。是这样么?
作者回复: 首先,我在《代码之丑》里讲过,setter是不应该存在的,getter的使用也需要谨慎。其次,getter需要确认是真getter,还是有逻辑的,有逻辑的是需要覆盖的。最后,getter可以不写,不仅是不写测试,甚至是不写代码,Java程序可以使用Lombok这个程序库,只用Annotation,没有代码就不用纠结是否覆盖了。 解决了你前面的问题,后面的就不是问题了。
2021-08-288 - davix請問100%覆蓋會不會導致過度測試導致難以重構?
作者回复: 往前看,这也是我为什么要先讲做好设计,做好单元测试的原因,有了这些基础,才是 100%覆盖。
2021-08-255 - 码农Kevin亮接前面的提问。我实践过,即使是用lombok,在覆盖率统计里也是有行数统计出来的。不知道是不是我不会设置呢。所以假如lombok并不能使得覆盖率扫描避开这些代码,那老师对于把充血模型单独拆出一个贫血实体然后排除扫描的方式,来满足100%覆盖率的作法有何评价呢?
作者回复: 在 lombok.config 里有这么一段代码: lombok.addLombokGeneratedAnnotation = true
2021-08-293 - coyang老师好,我遇到以下两种不好测试的情况: 1.死循环的逻辑 2.static函数 以上两种情况怎么保证覆盖率100%呢?
作者回复: 死循环,把逻辑部分挪出来,单独测试。把循环的地方单独隔离出来,排除在覆盖率之外。 static 函数,要是没有任何字段,只是纯逻辑,就可以直接测试,就像一个程序库去测试。要是有复杂的关联,还是最好先考虑改造吧,把依赖解开,改造成一个正常的函数再做测试。这类似于遗留系统,后面我会提到,遗留系统改造主要是分离和隔离。
2021-08-2623 - asusualTDD写出来的代码一般情况覆盖率都是100%
作者回复: TDD 比较容易 100%
2021-08-263 - 大碗请问老师对“第三方代码”的界定为是不是自己编写的代码,第一种常见的是非公司的类库,比如Jackson,这种好理解。第二种是服务A调用服务B的api.jar,第三种两个人编写服务A的两个模块C,D,编写C的人调用了别人D的方法,后面两种也属于调用第三方代码么?
作者回复: 我指的就是你没法控制的代码。
2021-08-253 - sylan215我们说的代码覆盖率的要求,是针对自己写的代码,如果有第三方代码的引用,一定要做好封装和隔离。 「补测试」几乎是不可能的,所以再次强调,一定要测试和代码一起写。 不管是第三方代码隔离,还是自己代码的可测性,都要去我们要做好设计,可测试的设计。 代码覆盖率是一种质量保证的手段,可以帮我们从代码角度来查漏补缺,覆盖率高并不代表代码没问题。
作者回复: 很好的总结
2021-09-072 - Gojustforfun“我前面也强调过,任务的关键是小,比如,小到半个小时就可以提交一次,这样,你写测试的负担相对来说是小的”,请问这里的“提交”指的是git commit(提交到本地库)还是git push(提交到远程库)。 我个人的理解是git commit,完成某个功能的最后一个子任务后,将该功能的多个git commit合并再git push合并后的commit。不知这样做是否可以?有什么问题?还需要注意什么?谢谢
作者回复: 我没有做区分,能 commit 和能 push 对我来说是一回事,就是一次提交,一个完整任务的完成。push 才是终点,重点是把自己的代码是和别人的代码合在一起,否则,合并的工作量会增大。
2021-08-2532 - 北风一叶追求100%的 测试覆盖率
作者回复: 有了目标,剩下就是前进的动力了
2021-09-151 - davix請問mock中用verify 的多少影響覆蓋率嗎
作者回复: 不会
2021-08-261