第1章 序言
我们是为了自身的利益去使用单元测试,从而让我们的工作变得更加轻松。
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,证明某段代码的行为确实和开发者所期望的一致。
第2章 你的首个单元测试
(笔记略)
第3章 使用JUnit编写测试
- 准备测试所需要的各种条件
- 调用要测试的方法
- 验证被测试方法的行为和期望是否一致(*断言)
- 完成后清理各种资源
第4章 测试哪些内容
1. 结果是否正确
- 如果代码能够运行正确,我要怎么才知道它是正确的呢
- 考虑使用独立的数据文件存储测试数据
2. 边界条件
* 完全伪造或者不一致的输入数据
* 格式错误的数据
* 空值或者不完整的值
* 一些与意料中的合理值相去甚远的数值
* 不该存在重复数值的数组
* 不该是无序的数组
* 不正确的事情次序
3. 检查反向关联
比如用「乘方」的方法验证「开方」。
4. 使用其他手段来实现交叉检查
用一种算法实现,另一种算法检验。
5. 强制产生错误条件
6. 性能特性
第5章 边界条件
- 一致性:值是否符合预期的格式
- 顺序性:值是否符合预期的顺序
- 区间性:值是否处于预期的区间
- 依赖性:程序是否处于预期的状态
- 存在性:值是否存在
- 基数性:计算得到的数目与所需的是否一致
- 时间性:时间顺序,消耗时间,并发问题
第6章 使用Mock对象
1. 使用接口描述对象
2. 产品代码实现接口
3. 测试代码Mock接口
第7章 好的测试所具有的品质
* 自动化:自动测试,自动检查
* 彻底的:测试所有可能会出问题的情况
* 可重复:测试应该能够以任意的顺序一次又一次运行,产生相同结果
* 独立的:一个测试函数只测试产品代码中的一个函数
* 专业的:使用和产品代码相同的专业水准来编写维护测试代码
第8章 在项目中进行测试
* 存放代码的位置
* 提交到代码库时要保证所有测试通过
* 测试频率要恰到好处
* 测试遗留代码
* 评审测试代码
第9章 设计话题
* 面向测试的设计:关注点分离
* 为测试而重构
* 测试类的不变性:确信类的整个状态都是一致的
* 测试驱动设计:在编写实现代码之前,就编写它们的测试代码
* 测试无效的参数