单元测试
敏捷和TDD促使了许多程序员编写自动化单元测试。
1.TDD三定律
①在编写不能通过的单元测试前,不可编写生产代码;
②只可编写刚好无法通过的单元测试,不能编译也算不通过;
③只可编写刚好足以通过当前失败测试的生产代码;
2.测试很重要
- 测试代码和生产代码一样重要,不是二等公民,需要被思考、被设计和被照料,应该像生产代码一样保持整洁。
- 是单元测试使得代码可扩展,可维护,可复用。没有单元测试的保证,就不敢放心地改动代码。
- 覆盖了生产代码的自动化单元测试能很大程度地保持设计和架构的整洁。覆盖率高的测试能够促使毫无顾虑地改进架构和设计。
3.整洁的测试
整洁的测试三要素:可读性、可读性,可读性!
单元测试中,可读性甚至比生产代码更重要。
明确,简洁,足够的表达力,呈现出 构造->测试->验证的模式;
4.每个测试函数只测一个概念
单个测试中断言的数量应该最小化,每个测试函数只测一个概念(一类场景)
5.FIRST
Fast–快速 :测试快速运行;如果测试运行缓慢,你就不会想要频繁的运行它,如果你不频繁的运行测试,就不能尽早发现问题,最终,代码就会变坏。
Independent–独立:测试相互独立,某个测试不应为下一个测试设定条件,需要独立运行每个测试及以任何顺序运行测试。当测试相互依赖,前面没通过会导致后面一连串的测试失败。
Repeatable– 可重复:测试应当在任何环境下可重复通过。
self-validating --自足验证:测试应该有布尔值输出,无论通过还是失败,不应该看日志文件手工对比。
Timely– 及时:测试应及时编写。