03 | 什么是单元测试?如何做好单元测试?
茹炳晟

今天我要跟你分享的主题是单元测试,如果你没有开发背景,感觉这篇文章理解起来有难度,那你可以在学完后续的“代码级测试”系列的文章后,再回过头来看一遍这篇文章,相信你会有醍醐灌顶的感觉。
什么是单元测试?
在正式开始今天的话题之前,我先给你分享一个工厂生产电视机的例子。
工厂首先会将各种电子元器件按照图纸组装在一起构成各个功能电路板,比如供电板、音视频解码板、射频接收板等,然后再将这些电路板组装起来构成一个完整的电视机。
如果一切顺利,接通电源后,你就可以开始观看电视节目了。但是很不幸,大多数情况下组装完成的电视机根本无法开机,这时你就需要把电视机拆开,然后逐个模块排查问题。
假设你发现是供电板的供电电压不足,那你就要继续逐级排查组成供电板的各个电子元器件,最终你可能发现罪魁祸首是一个电容的故障。这时,为了定位到这个问题,你已经花费了大量的时间和精力。
那在后续的生产中,如何才能避免类似的问题呢?
你可能立即就会想到,为什么不在组装前,就先测试每个要用到的电子元器件呢?这样你就可以先排除有问题的元器件,最大程度地防止组装完成后逐级排查问题的事情发生。
实践也证明,这的确是一个行之有效的好办法。
如果把电视机的生产、测试和软件的开发、测试进行类比,你可以发现:
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件测试 52 讲》,新⼈⾸单¥68
《软件测试 52 讲》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(78)
- 最新
- 精选
- 海罗沃德在Accenture时候单元测试行覆盖率要达到99%,分支覆盖率要达到90%,仅一些exception分支可以不用覆盖,并且每个测试用例前面要注释好这个case测的是什么方法,输入什么输出什么,预计结果是什么等以便code review时可以快速的知道这段代码是做什么的,甚至一些大功能还要带上use case的id方便追溯原始需求,在测数据持久化层测试要通过内存数据库把CRUD流程都测出来
作者回复: 埃森哲的所有项目都有这么高的单元测试需求吗?我的理解是一些和人的生命安全息息相关的软件才会有几近苛刻的代码覆盖率要求,比如航空航天,汽车电子,轨道交通,部分医疗器械软件等,如果所有项目都这样做成本还是很高的
16 - happychap单元测试本身并不复杂,但在实践中又经常需要十填许多坑,如:事务的传递可能导致单元测试结束后事务回滚失败(若用内存数据库又存在解决sql兼容性的烦恼),多线程执行单元测试导致测试结果不正确,对第三方接口做mock困难,实现逻辑中会周期性计划任务的功能也不好做单元测试。
作者回复: 涉及数据库的单元测试建议不要操作真实的数据库,而是使用dbmock。你说的非常对,单元测试是入门容易,工程实践比较难
10 - 奕自动化测试集应该是一把可信的、灵活的尺子。所以测试集不宜过大,应能支持在几个小时内给出稳定可信结果。测试集的大小应考虑以下几个方面:以时间窗口为首要敏感因素,然后考虑覆盖功能的重要程度,测试执行的稳定性。
作者回复: 很棒的总结
7 - Geek_84a77e不太理解老师说的输入数据那部分 只知道被测函数的参数进行设计 不知道如何针对函数的成员变量等进行设计用例?
作者回复: 能问这个问题,说明你已经很好地理解了文章的关键内容。这里的成员变量指的是类的成员变量,逻辑上你也可以把它想象成是全局变量。因为函数内部会去读取类的成员变量,然后根据类的成员变量来决定后续逻辑等。
27 - 刘炜单元测试开展最佳时机是从项目初级就开始,结合TDD的方式。现实中的困难就是当代码已经烂成一坨翔的时候才意识到要做单元测试,而这个时候的成本和收益已经不允许了。
作者回复: 哈哈,你说得太对了,但是现实都是先实现再补单元测试
5 - Elsa我所在的是敏捷开发团队,QA需要review UT,那么我想知道QA 怎样review UT才更有价值呢?现在基本是根据业务需求去review UT的case是否有遗漏
作者回复: 我建议qa从接口层面review效率更高,qa直接review ut可能并不是太合适
24 - 捷后愚生这篇文章,不仅是测试人员要看,开发人员也要看!
作者回复: 是的,可能开发看会更有感觉,因为单元测试一般都是开发自己在做
32 - 永不放弃老师,后面会有实战部分吗?
作者回复: 专栏后期会有专门的篇幅讲代码级测试,那里会提供更多实际的例子
1 - Walter请问一下,现在如果要做plc这种单元级别的测试,该如何做呢?
作者回复: PLC的单元测试用例的设计思想方法是类似的,但是具体实施起来的差别会比较大,PLC一般都有自己专用的ide环境,我不确定是否存在类似Xunit的工具。
- 小老鼠单元测试是否应该也分为黑盒与白盒测试两种。不考虑内部实现的API属于黑盒单元测试、考虑语句、分支、条件等程序内部覆盖率的测试属于白盒单元测试。
作者回复: 严格来讲,单元测试基本都是属于白盒的范畴,而api本身更多属于灰盒的范畴。但是,我们其实并没有很大的必要去纠结到底是黑盒还是白盒,我们应该通过这样的分类来看到背后想要表达的测试思想。
收起评论