前面两篇文章里,讲述了如何评估测试范围,介绍了白盒测试入门基础。本篇转向实战,沿着项目实践的时间线,从单元测试的设计、实现、调试和剩余价值四方面分享小编的所思所想。
Part1: 单元测试用例设计
单元测试用例的设计方法有很多,不再一一赘述。这里讲讲单元测试用例的设计原则。
a.控制每个用例的检查点数目,最好是一个用例检查一个点;
b.用例之间杜绝数据依赖,或者关联影响;
c.用例不仅要覆盖正确情况,还要测试异常情况,检查函数健壮性;
d.拒绝无谓的断言;
e.用例要尽可能覆盖到较多的逻辑路径;
f.用例要做到对检查点敏感,在功能失效时候能立即反馈。
Part2: 单元测试用例实现
编码实现单元测试用例的过程中,需要注意一下问题:
a.编码规范性。为了提高程序可读性,建议大家使用匈牙利命名法来命名程序中的变量,方便团队合作
b.合适的注释。注释不是越多越好,好的注释旨在提供有用的信息,要清楚明了,避免缩写。建议在函数头加上注释,统一列出函数的功能,输入输出参数,返回值,调用场景等;
c.确保代码和注释的一致性。如果有注释,请在代码变动的同时,维护相应的注释;否则不如没有注释;
d.减少重复代码。比如每个case中都进行数据初始化,检查数据正确性的操作,就可以把这些提取为辅助函数,便于修改和维护;
e.充分使用断言。在用例中,如果对某一点的数据状态不清楚,请用assert.一来,如果有数据异常,可以第一时间定位到;二来,可以避免因为数据问题造成用例崩溃;
f.数据逻辑隔离。可以考虑把用例中的数据和逻辑验证分割开来,既可以方便维护,又使得各个用例清晰易读。
Part3: 单元测试用例调试
用例编写完成后,难免会有fail或者崩溃,这时需要调试,确认问题原因,如果是开发代码问题,恭喜你,找到了bug。
小编总结了几个工作中常用到的调试技巧:
a.ctrl+F10 跳到当前光标处,即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去;
b.条件中断:
c.记录到达断点次数:
d.跟踪点:是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用
e:善用AddWatch跟踪变量数值变化
Part4: 单元测试用例价值
辛辛苦苦写的单元测试用例,测试完成就没用了吗?No!
单测的价值远不止于这种一次性的测试,我们可以:
a.一般性用途:定位问题,验证bug ;
b.回归运行:自动测试,减少手工回归;
c.持续集成:通过累积单测,并在每一次代码变更时,自动运行单测。达成对代码的实时监控和自动测试;
d.扩大覆盖:持续积累单测,可以逐步扩大对当前项目的测试覆盖度;
e. 策略参考:每一个case的检查点都是对策略的解读,读懂白盒case,也就明了了代码策略。