11|单元测试(二):四象限法让你的单测火力全开
从一个需求说起
- 深入了解
- 翻译
- 解释
- 总结
通过本文,读者可以了解到如何通过四象限法评估代码的可测试性,并从一个实际需求出发,展示了如何通过重构提高代码的可测试性。同时,文章还强调了持续重构的重要性,以打磨出更好的设计。这对于开发人员和自动化测试架构师来说,是一篇具有实际指导意义的技术文章。 文章首先介绍了一个简单的需求,即用户在页面上修改邮箱地址,但在FoodCome平台上有特定的业务逻辑。接着,作者通过引入四象限法来评估代码的可测试性,指出原始代码的User Class属于复杂代码象限,难以进行单元测试。随后,作者提出了版本V2的改进方案,将业务逻辑和外部依赖的交互分离,创建了一个新的UserController Class来专注管理外部依赖,同时对User Class进行了重构。最终,作者总结了版本V2的改进,指出现在的代码具有更好的可测试性,User Class和UserController Class都可以进行测试。 通过三个版本的代码例子,读者也应该发现了,单元测试并不是眉毛胡子一把抓。首先,应该关注业务逻辑能否在单元测试里充分测试,这是跟自动化测试高度关联的地方。而Mock的目标,则是辅助业务逻辑能够更早更快地测试。文章最后提出了一个思考题,制定单元测试覆盖率100%的目标有价值么?如果让你制定目标,你会怎么做? 总的来说,本文通过实际案例和代码示例,向读者展示了如何通过四象限法评估代码的可测试性,并通过重构提高代码的可测试性,强调了持续重构的重要性,对于开发人员和自动化测试架构师具有实际指导意义。
《自动化测试高手课》,新⼈⾸单¥59
全部留言(5)
- 最新
- 精选
- lisa辩证来看,单元测试的行覆盖率是有价值的,但是制定100%的覆盖率是一种错误的管理手段。测试的本质是发现问题,防止问题外漏,所以无论是单元测试还是其他测试,都是从代码的风险出发来设计用例,而不是从行覆盖的角度出发。
作者回复: 非常到位!在度量模块里,我们也会提到,如果用单一的维度来度量工作的话,会诱导工作机械化,甚至弄虚作假。
2022-04-149 - swordman如果一定要定一个覆盖率目标,领域代码这部分的覆盖率,会更有价值。这又引出一个新问题,如何判断设计时做了领域代码和依赖代码的拆分。除了和开发人员一起检查以外,我觉得可以加一个测试用例使用Mock函数的自动扫描:如果做了拆分,领域代码部分的用例,是无需做Mock的,如果测试用例高频的使用Mock函数,说明产品代码本身,并没有把复杂代码分解干净。(这是我个人的理解,恳请老师指正)
作者回复: 这是一个很好的思路!你已经开始考虑怎么度量“好的代码结构”了!
2022-05-144 - 羊羊以前学习设计模式,其中有一条法则:迪米特法则,也叫做“不和陌生人说话”。一直都不知道这条法则到底如何应用,目的是什么。看到老师的代码可测性改造,才明白,符合了迪米特法则的代码,可以显式外部依赖项,方便测试时 Moke 外部依赖。
作者回复: 有悟性,谢谢分享!我又温习了一下迪米特法则,大道至简,殊途同归。😄
2022-07-29归属地:日本2 - Rachel感觉这节主要分析了开发的逻辑。。。实际上如果开发没那么多,还是很多问题
作者回复: 所以说,如果测试的目的是为了发现bug,会发现这是个无间痛苦,各种各样的bug层出不穷。但是,如果测试能够推动开发改善,这就会进入到一个积极的循环中去。
2022-07-27归属地:日本2 - 太匆匆单纯追求覆盖率没有意义,追求关键代码覆盖到就可以了。领域代码应该就是这部分关键代码了
作者回复: 很到位!
2022-04-16