单测级别
-
Level1:正常流程可用,即一个函数在输入正确的参数时,会有正确的输出
-
Level2:异常流程可抛出逻辑异常,即输入参数有误时,不能抛出系统异常,而是用自己定义的逻辑异常通知上层调用代码其错误之处
-
Level3:极端情况和边界数据可用,对输入参数的边界情况也要单独测试,确保输出是正确有效的
-
Level4:所有分支、循环的逻辑走通,不能有任何流程是测试不到的
-
Level5:输出数据的所有字段验证,对有复杂数据结构的输出,确保每个字段都是正确的
测试数据
测试数据必须是人为可控的,不要从线上环境dump出来。
测试数据= 基础数据+附加数据
- 基础数据是所有case能公用的
- 附加数据是某个case特有逻辑所需要的
纯函数与副作用函数
什么是纯函数:一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数 即满足如下条件的函数为纯函数:
-
相同输入总是会返回相同的输出。
-
不产生副作用(意味着它无法更改任何外部状态)。
-
不依赖于外部状态。
副作用函数则相反,同样的输入,在不同时间和环境里,可能有不同的输出。比如任何涉及IO、网络、数据库的。
副作用函数的测试比纯函数麻烦的多,因为你必须要完整的构造其所依赖的所有环境,才能够复现一个副作用函数的行为。也正因为如此,副作用函数出bug的概率比纯函数高的多。
理解这个概念以后,应该尽可能的把程序里的纯函数和副作用函数进行拆解,降低副作用函数的比例和逻辑复杂度。还有,副作用函数是会传染的,一个函数如果调用了副作用函数,那么它也会变成副作用函数。
参考
各位都是怎么进行单元测试的? - 大宽宽的回答 - 知乎 https://www.zhihu.com/question/27313846/answer/853193909
...