第1章 序言

我们是为了自身的利益去使用单元测试,从而让我们的工作变得更加轻松。

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,证明某段代码的行为确实和开发者所期望的一致。

第2章 你的首个单元测试

(笔记略)

第3章 使用JUnit编写测试

- 准备测试所需要的各种条件

- 调用要测试的方法

- 验证被测试方法的行为和期望是否一致(*断言)

- 完成后清理各种资源

第4章 测试哪些内容

1. 结果是否正确

- 如果代码能够运行正确,我要怎么才知道它是正确的呢

- 考虑使用独立的数据文件存储测试数据

2. 边界条件

* 完全伪造或者不一致的输入数据

* 格式错误的数据

* 空值或者不完整的值

* 一些与意料中的合理值相去甚远的数值

* 不该存在重复数值的数组

* 不该是无序的数组

* 不正确的事情次序

3. 检查反向关联

比如用「乘方」的方法验证「开方」。

4. 使用其他手段来实现交叉检查

用一种算法实现,另一种算法检验。

5. 强制产生错误条件

6. 性能特性

第5章 边界条件

- 一致性:值是否符合预期的格式

- 顺序性:值是否符合预期的顺序

- 区间性:值是否处于预期的区间

- 依赖性:程序是否处于预期的状态

- 存在性:值是否存在

- 基数性:计算得到的数目与所需的是否一致

- 时间性:时间顺序,消耗时间,并发问题

第6章 使用Mock对象

1. 使用接口描述对象

2. 产品代码实现接口

3. 测试代码Mock接口

第7章 好的测试所具有的品质

* 自动化:自动测试,自动检查

* 彻底的:测试所有可能会出问题的情况

* 可重复:测试应该能够以任意的顺序一次又一次运行,产生相同结果

* 独立的:一个测试函数只测试产品代码中的一个函数

* 专业的:使用和产品代码相同的专业水准来编写维护测试代码

第8章 在项目中进行测试

* 存放代码的位置

* 提交到代码库时要保证所有测试通过

* 测试频率要恰到好处

* 测试遗留代码

* 评审测试代码

第9章 设计话题

* 面向测试的设计:关注点分离

* 为测试而重构

* 测试类的不变性:确信类的整个状态都是一致的

* 测试驱动设计:在编写实现代码之前,就编写它们的测试代码

* 测试无效的参数