前 言
过去10余年间,Java开发者显著地青睐开发者测试。如今,计算机科学专业的毕业生无人不知自动化单元测试及其在软件开发中的重要性。这个想法很简单——确保我们的代码能工作并且一直能工作——但是该技能需要花很大力气去学习。
编写测试、学习JUnit的测试框架,这些都不难。要真正地掌握编写自动化单元测试实践,需要花大量时间在阅读并改善测试代码上。这种持续的测试重构能够尝试用不同方式来表达意图、组织测试的不同行为、用测试构建各种用到的对象——这才是一种务实的方式,用来自我学习和培养对单元测试的感觉。
这种感觉是关于哪些是优秀的单元测试,而哪些不那么优秀。有些是绝对的真理(比如完全在重复代码内容的注释就是冗余的,应该被删除),但大多数关于单元测试的知识都取决于上下文。通常意义上的优秀在特定条件下可能却很糟糕。同样,一般认为糟糕和应当避免的想法有时却是正确的做法。
原来,找到优秀方案的最好方式就是尝试一个看似可行的方法,识别该方法的问题,然后改变该方法从而消除讨厌的部分。通过重复这个过程,不断地评估和进化,最终你会找到一个可行的方案,它闻起来没那么臭。你甚至会说那是相当优秀的方式!
考虑到这种复杂性,本书采用了一种风格和结构,那就是我们不会告诉你怎么做,也不会告诉你怎么编写单元测试。相反,我打算给你一个坚实的基础,让你知道哪些是我们希望测试表现出的属性,然后给你尽可能多的例子来培养你对测试坏味道的感觉——帮你注意到测试中的不合时宜之处。
受众
目 录
第一部分 基础
第1章 优秀测试的承诺
1.1 国情咨文:编写更好的测试
1.2 测试的价值
1.3 测试作为设计工具
1.4 小结
第2章 寻求优秀
2.1 可读的代码才是可维护的代码
2.2 结构有助于理解事物
2.3 如果测试了错误的东西就不好了
2.4 独立的测试易于单独运行
2.5 可靠的测试才是可靠的
2.6 每个行业都有其工具而测试也不例外
2.7 小结
第3章 测试替身
3.1 测试替身的威力
3.2 测试替身的类型
3.3 使用测试替身的指南
3.4 小结
第二部分 目录
第4章 可读性
4.1 基本断言
4.1.1 示例
4.1.2 该对它做点儿什么
4.1.3 小结
4.2 过度断言
4.2.1 示例
4.2.2 该对它做点儿什么
4.2.3 小结
4.3 按位断言
4.3.1 示例
4.3.2 该对它做点儿什么
4.3.3 小结
4.4 附加细节
4.4.1 示例
4.4.2 该对它做点儿什么
4.4.3 小结
4.5 人格分裂
4.5.1 示例
4.5.2 该对它做点儿什么
4.5.3 小结
4.6 逻辑分割
4.6.1 示例
4.6.2 该对它做点儿什么
4.6.3 小结
4.7 魔法数字
4.7.1 示例
4.7.2 该对它做点儿什么
4.7.3 小结
4.8 冗长安装
4.8.1 示例
4.8.2 该对它做点儿什么
4.8.3 小结
4.9 过分保护
4.9.1 示例
4.9.2 该对它做点儿什么
4.9.3 小结
4.10 总结