单测级别

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

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

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

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

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

测试数据

测试数据必须是人为可控的,不要从线上环境dump出来。

测试数据= 基础数据+附加数据

  • 基础数据是所有case能公用的
  • 附加数据是某个case特有逻辑所需要的

纯函数与副作用函数

什么是纯函数:一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数 即满足如下条件的函数为纯函数:

  • 相同输入总是会返回相同的输出。

  • 不产生副作用(意味着它无法更改任何外部状态)。

  • 不依赖于外部状态。

副作用函数则相反,同样的输入,在不同时间和环境里,可能有不同的输出。比如任何涉及IO、网络、数据库的。

副作用函数的测试比纯函数麻烦的多,因为你必须要完整的构造其所依赖的所有环境,才能够复现一个副作用函数的行为。也正因为如此,副作用函数出bug的概率比纯函数高的多。

理解这个概念以后,应该尽可能的把程序里的纯函数和副作用函数进行拆解,降低副作用函数的比例和逻辑复杂度。还有,副作用函数是会传染的,一个函数如果调用了副作用函数,那么它也会变成副作用函数。

参考

各位都是怎么进行单元测试的? - 大宽宽的回答 - 知乎 https://www.zhihu.com/question/27313846/answer/853193909