单元测试的艺术
第 1 章 单元测试基础
回归是以前运行良好但是现在不工作的一个或多个工作单元。
遗留代码在维基百科中定义为“与一个不再受支持或继续生产的操作系统,或其他计算机技术相关的源代码”,但是很多公司把任何比当前维护的应用更老旧的版本都称为遗留代码。这个词经常用来指代那些难以使用,难以测试,通常也更难以阅读的代码。
一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。单元测试几乎都是用单元测试框架编写的。单元测试容易编写,能快速运行。单元测试可靠、可读,并且可维护。只要产品代码不发生变化,单元测试的结果是稳定的。
1.7 成功进行TDD的三种核心技能
成功进行测试驱动开发,你需要三种技能集:知道如何编写优秀的测试、在编码前编写测试,以及良好的测试设计。
- 仅仅做到先编写测试,并不能保证测试是可维护、可读以及可靠的。你正在读的这本书讲的全都是进行优秀单元测试的技巧。
- 仅仅做到编写的测试可读、可维护,并不能保证你获得先编写测试的各种好处。市面上大部分讲TDD的书介绍的都是测试优先的技能,而不讲授优秀测试技能。我特别推荐Kent Beck的Test-Driven Development: by Example(Addison-Wesly Professional,2002)。
- 仅仅做到先编写测试,并且测试可读、可维护,并不能保证你得到一个设计完善的系统。设计能力才是使代码优美、可维护的关键。关于这方面的好书,我推荐Steve Freeman和Nat Pryce的Growing Object-Oriented Software, Guided by Tests(Addison-Wesly Professional,2009)以及Robert C. Martin的《程序员的职业素养》。
1.8 小结
一个优秀单元测试应具有的特质,如下所示:
- 一段自动化的代码,它调用另一个方法,然后检验关于此方法或类的逻辑行为的某些假设;
- 用一个自动化测试框架编写。
- 容易编写。
- 运行快速。
- 能由开发团队里的任何人重复执行。
第 2 章 第一个单元测试
2.1 单元测试框架
2.1.1 单元测试框架提供什么

第 3 章 使用存根破除依赖
第 4 章 使用模拟对象进行交互测试
第 5 章 隔离(模拟)框架
第 6 章 深入了解隔离框架
第 7 章 测试层次和组织
第 8 章 优秀单元测试的支柱
第 9 章 在组织中引入单元测试
第 10 章 遗留代码
第 11 章 设计与可测试性
其他参考书籍
- Test-Driven development: by Example
- 程序员的职业素养
- Growing Object-Oriented Software, Guided by Tests