单元测试随记

测试级别

Level1:正常流程可用,即一个函数在输入正确的参数时,会有正确的输出
Level2:异常流程可抛出逻辑异常,即输入参数有误时,不能抛出系统异常,而是用自己定义的逻辑异常通知上层调用代码其错误之处
Level3:极端情况和边界数据可用,对输入参数的边界情况也要单独测试,确保输出是正确有效的
Level4:所有分支、循环的逻辑走通,不能有任何流程是测试不到的
Level5:输出数据的所有字段验证,对有复杂数据结构的输出,确保每个字段都是正确的
一般只做到Level2,重要系统或者底层服务,要做到Level3或Level4。而很少做到Level5。即便如此,就已经实现了如上所说的,很难被测试工程师发现bug。

测试点

模块接口测试

通过所测模块的数据流进行测试。调用所测模块时的输入参数与模块的形式参数的个数、属性和顺序是否匹配。

局部数据结构测试

局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确、模块的局部数据结构往往是错误的根源。

路径测试

对模块中重要的执行路径进行测试。

错误处理测试

比较完善的模块设计要求能遇见出错的条件,并设置适当的出错处理,以便在一旦程序出错时,能对出错程序重做安排,保证其逻辑上的正确性。

边界条件测试

软件经常在便捷上失效,边界条件测试是一项基础测试,也是后面系统测试中的功能测试的重点。

构造测试数据

测试数据分为基础数据和附加数据两部分。
基础数据是所有testcase共享的,比如建立几个常用角色的用户等等。
附加数据是testcase内部自己建立的。这样每次testcase运行时,先清空数据库,导入基础数据,导入附加数据,然后执行测试,验证结果。

各类程序的函数可以分为纯函数和副作用函数。
纯函数对应的是数学里函数的概念,输出和输入是一一对应的。对一个输入有确定的输出。比如1+1=2。而副作用函数则相反,同样的输入,在不同时间和环境里,可能有不同的输出。比如任何涉及IO、网络、数据库的。

副作用函数的测试比纯函数麻烦的多,因为你必须要完整的构造其所依赖的所有环境,才能够复现一个副作用函数的行为。也正因为如此,副作用函数出bug的概率比纯函数高的多。理解这个概念以后,应该尽可能的把程序里的纯函数和副作用函数进行拆解,降低副作用函数的比例和逻辑复杂度。
还有,副作用函数是会传染的,一个函数如果调用了副作用函数,那么它也会变成副作用函数

摘录自各位都是怎么进行单元测试的? - gashero的回答 - 知乎

你可能感兴趣的:(单元测试随记)