美文网首页
单元测试的重要性

单元测试的重要性

作者: 吴小白吃 | 来源:发表于2017-06-16 09:55 被阅读156次

单元测试,或者更大一些的自动化测试,对提高软件质量是有很大帮助的。通过一系列预先设计的规则,就可以覆盖大量的测试点。尤其是对重构一类的任务,确保修改前后系统行为不变很重要,而修改后的回归测试工作量又极其繁重,此时单元测试,或者自动化测试就能体现出无以伦比的效率。

我在2005年学Python不久,就郁闷于自己那点代码手工测试很麻烦,恰好那时得知了很多Python工程师有做单元测试的习惯,于是就学习了一下,果然效果卓群。后来又经过数年整理出自己的一套单元测试的规范。

我做过的各类Python项目,代码总量的50%左右是单元测试。经过这个级别的单元测试覆盖,确保了底层函数基本不会出错,这样高层功能的调试才更方便。同时也是这个覆盖程度确保了,被测试工程师发现bug的可能性已经很低了。

我给自己的单元测试设置了5个级别:

1. Level1:正常流程可用,即一个函数在输入正确的参数时,会有正确的输出

2. Level2:异常流程可抛出逻辑异常,即输入参数有误时,不能抛出系统异常,而是用自己定义的逻辑异常通知上层调用代码其错误之处

3. Level3:极端情况和边界数据可用,对输入参数的边界情况也要单独测试,确保输出是正确有效的

4. Level4:所有分支、循环的逻辑走通,不能有任何流程是测试不到的

5. Level5:输出数据的所有字段验证,对有复杂数据结构的输出,确保每个字段都是正确的

如上的单元测试分级是我2007年整理出来的,后来在我做的各种项目中,一般只做到Level2,重要系统或者底层服务,要做到Level3或Level4。而很少做到Level5。即便如此,就已经实现了如上所说的,很难被测试工程师发现bug。

除了级别外,测试方法也要区分不同系统的玩法。比如基于WEB的系统,就需要确保单元测试里可以模拟发送请求,这个一般是WEB框架提供支持的。比如我常用的web.py、Flask、Django都有支持。不仅仅可以模拟简单的请求,还可以模拟POST、cookie等。另外一般建议单独写个函数来模拟登录过程,这样系统登录后行为的测试就不必反复模拟登录了。

单元测试一大痛苦是构造测试数据。我的看法是测试数据应该是人造的,而不是随便从产品环境dump出来一份。只有人造的数据能确保环境可控,每次运行不会因为环境改变而频繁修改testcase。我的常用玩法是测试数据分为基础数据和附加数据两部分。基础数据是所有testcase共享的,比如建立几个常用角色的用户等等。附加数据是testcase内部自己建立的。这样每次testcase运行时,先清空数据库,导入基础数据,导入附加数据,然后执行测试,验证结果。

各类程序的函数可以分为纯函数和副作用函数。纯函数对应的是数学里函数的概念,输出和输入是一一对应的。对一个输入有确定的输出。比如1+1=2。而副作用函数则相反,同样的输入,在不同时间和环境里,可能有不同的输出。比如任何涉及IO、网络、数据库的。副作用函数的测试比纯函数麻烦的多,因为你必须要完整的构造其所依赖的所有环境,才能够复现一个副作用函数的行为。也正因为如此,副作用函数出bug的概率比纯函数高的多。理解这个概念以后,应该尽可能的把程序里的纯函数和副作用函数进行拆解,降低副作用函数的比例和逻辑复杂度。还有,副作用函数是会传染的,一个函数如果调用了副作用函数,那么它也会变成副作用函数。

>>戳戳,免费下载零编码自动化测试工具TestWriter~

相关文章

  • 超级详细的Junit单元测试教程

    文章目录 Junit单元测试 一、什么是单元测试? 二、单元测试的重要性 三、黑盒测试与白盒测试 3.1 黑盒测试...

  • iOS单元测试

    1 单元测试重要吗? 重要!单元测试的重要性,不言而喻,在迭代开发Framework 的过程中,好的单元测试,能及...

  • 11个最好的JavaScript单元测试框架和工具

    单元测试的重要性 单元测试是在模块层面上测试实现的代码的过程。单元测试允许你确保你开发的模块满足业务文件所规定的要...

  • JUnit

    单元测试的重要性 什么是单元测试单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象...

  • 聊一聊,单元测试应该测试什么?

    开始 现在大公司越来越重视项目的单元测试,甚至明确要求项目的单元测试覆盖率不能低于某个值,足可见单元测试的重要性;...

  • 单元测试工具-JUnit的基本介绍

    最近在读软件工程,说起单元测试的重要性,每一个类每一个方法都需要经过单元测试。想想现在的项目对单元测试的重视程度不...

  • 理解 Unittest 框架(C)

    (转自测试前辈) 单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittes...

  • 简单几步分析测试覆盖率

    太久没有更新博客了,当初承诺的周更快变成月更了,(⊙﹏⊙)b 上次介绍了单元测试的重要性和如何开始写单元测试,今天...

  • iOS Framework 单元测试(一)-- XCTests

    写在前面 单元测试的重要性,不言而喻,在迭代开发 Framework 的过程中,好的单元测试,能及早发现问题。 关...

  • 一文弄懂Springboot+Junit5微服务单元测试编写实践

    Springboot+Junit5微服务单元测试编写实践 现在写单元测试的重要性不言而喻,下边说明一下Junit5...

网友评论

      本文标题:单元测试的重要性

      本文链接:https://www.haomeiwen.com/subject/svppqxtx.html