单元测试
1 TDD三定律
- 在编写不能通过的单元测试前,不可编写生产代码。
- 只可编写刚好无法通过的单元测试,不能编译也算不通过。
- 只可编写刚好足以通过当前失败测试的生产代码。
2 保持测试整洁
测试必须随着生产代码的演进而修改。测试越脏,就越难修改。
这里脏测试的脏指的是:
- 变量名不用好
- 函数名不短小,不具有描述性
- 不做好良好涉及和仔细划分
诸如此类。
结论:测试代码和生产代码一样重要!
3 整洁的测试
整洁测试三要素:
- 可读性!
- 可读性!!
- 可读性!!!
要尽可能用少的文字表达出大量的内容。
单测的构成应该是构造-操作-检验的模式。每个测试都应该清楚的分成三个环节。
构造-操作-检验:
- 构造测试数据
- 操作测试数据
- 检验操作是否得到期望的结果
3.1 面向特定领域的测试语言
我们可以将单测里面的三个环节,拆分成几个函数,这种打包一套包装生产环境API的函数和工具代码,也被称为面向特定领域的语言技巧。
3.2 双重标准
生产环境和测试环境的编写代码的标准是不同的。
有些事情在生产环境中不会做的,可能测试环境可以使用,例如生产环境的资源条件可能有限,这样我们的代码就要注意效率。而测试环境没有这个要求,就可以借此编译出更准确的代码。
4 每个测试一个断言
单测存在一种说法,
每个测试应该有且只有一个断言语句。这种说法是为了保证让一个单测保证自己测试的内容。
不要让一个单测测试很多事。这样可能会产生疏漏。我们可以用多个单元测试分开去做这些事。
5 F.I.R.S.T
整洁的测试遵循的5条原则 :
- 快速(Fast):测试应该快速运行。
- 独立(Independent): 测试之间彼此独立,不能出现前一个测试会影响后一个测试的内容的情况。
- 可重复(repeatable):测试应该在任何情况下都能重复通过。
- 自足验证(self-validating):测试应该由布尔值输出。无论通过or失败都不应查看日志进行判断测试结果。
- 及时(Timely):测试应该及时编写。在编写生产环境代码前编写测试。
6 小结
测试应该短小精悍又富有表达力。
五条原则记忆犹新,单测构成历历在目,每一天的学习每一天的进步~