少年,单元测试的两个流派了解下!

本文介绍了单元测试的两种主要流派:状态流和行为流。状态流关注被测对象影响的状态,常用于验证功能正确性;行为流则通过验证对象行为,如调用顺序和参数,通常借助Mock工具。文章通过实例分析了两者的应用场景和优缺点,并强调正确理解和运用单元测试的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在的开发规范中多多少少会要求写单元测试。对单元测试的态度大家也分化的比较严重,有些人觉得单元测试没有用,根本就是浪费时间。有些人就特别的舔单元测试,甚至坚持TDD, 比如 pshu 本人????。

作为一个更加疯狂的 TDD 舔狗,pshu想对那些说单元测试没啥用的同学喊几句话。觉得单元测试没有用的同学,是你没有用正确的姿势来写测试。而姿势不正确是因为你不了解单元测试。今天 pshu 将从单元测试“流派”的角度来让大家来了更加深入的了解单元测试,从而帮助大家写出更好的单元测试。

状态流

什么是状态流呢? 通过检查被测对象所影响的状态的方式来验证正确性的测试方式,就是状态流。可能大家第一次听说状态流,但是大部分的单元测试都在做这个流派的实践。主要原因就是大家一开始接触的就是这个流派,目前大部分的单元测试的教程所演示的第一个例子都是类似下面的代码。

assert(2, sum(1,1))

这就是一个典型的状态流的做法,通过检查 sum 函数返回值这个被测对象的状态是否为 ’2’ 来决定测试是否成功。这样的测试方式很直接,也很好理解。包括介绍 TDD 的经典例子保龄球算分的 demo,也是采用了状态流的做法。在状态流流派中最有名的一位选手就是 Robert C. Martin,人称 Uncle Bob。这位大叔(真的是大叔,已经 67 岁高龄了),是敏捷宣言的作者之一,当然 Uncle Bob 最有名还是他写的 《Clean code》 (整洁代码)和《Agile Software Development: Principles, Patterns, and Practices》(敏捷软件开发:原则、模式与实践)这两本书了。Uncle Bob 对状态流真是情有独钟。当然他对状态流的用法也非常的独到。比如我们要比较两个圆的是否一致的情况。

2B 青年会直接用assertTrue(cirlce1.equals(circle2))从测试的角度看没有任何问题,但是当测试失败的时候。这样的状态流测试用例对查问题一点帮助都没有,只是冰冷的告诉你测试挂了。

一般青年会分别写三个断言,分别断言两个圆的圆心x,y和半径 r 是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值