单元测试的艺术

0. 总结

1~2章介绍的是单元测试的基本概念

3~6在教你如何测试

7~8教你怎么写好代码

9: 鸡汤

10: 对付遗留代码

11: 好好设计代码吧

1. 入门

优秀单元测试的特性

  1. 自动化,可重复执行
  2. 很容易实现
  3. 以后还有意义
  4. 任何人都能一键运行
  5. 速度很快
  6. 独立于其他测试的运行
  7. 如果它失败了,能快速定位问题

什么是集成测试

依赖到一个或多个真实依赖物,例如真实的系统时间,真实的文件系统,真实的数据库.

单元测试和集成测试的区别

集成测试会使用真实依赖物,而单元测试则把被测试单元和其以来无隔离开.

单元测试要点

  1. 测试的命名 测试的可维护性 测试的可读性
  2. 该成果的时候成果,该失败的时候失败

2 第一个单元测试

测试的命名

  1. UnitOfWork_Scenario_ExpectedBehavior
  2. UnitOfWork: 被测试的方法、一组方法或者一组类
  3. Scenario: 测试进行的假设条件
  4. ExpectedBehavior: 在测试场景指定的条件下,你对呗测试方法行为的预期

单元测试主要的三个行为

  1. 准备(Arrange)对象,创建对象,进行必要的设置
  2. 操作(Act)对象
  3. 断言(Assert) 某件事情的预期

3 使用存根破除依赖

存根跟模拟对象的区别是: 两者类似,但是我们需要对模拟对象进行断言,而不会对存根进行断言

这里主要是为了烂代码去写更多的代码去实现测试,感觉会本末倒置

使用IOC可优好的测试.

同意赞同重构代码,使其易于测试

4 使用模拟对象进行交互测试

4.1 基于值测试,基于状态测试,和交互测试

伪对象、存根、模拟对象的区别

  1. 伪对象指模拟对象/存根
  2. 如果伪对象用于检测一个交互,这个伪对象为模拟对象,否则为存根

4.2 模拟对象和存根的区别

模拟对象和存根的根本区别: 存根永远不会导致测试失败,而模拟对象可以

这个作者也是醉了..

第三、四章说完就说这两有缺陷,,这抛砖引玉...好啊......擦..

5 隔离(模拟)框架

麻鸡...

6 深入了解隔离框架

6.2 优秀隔离框架的价值

提高测试健壮性的功能

  1. 递归伪对象
  2. 对行为和验证默认忽略参数
  3. 非严格验证和行为
  4. 大范围伪造

7. 测试层次和组织

7.4将测试类映射到源代码

  1. 集成测试和单元测试必须分块
  2. 将每个待测试类对应一个测试类
  3. 当某个方法需要特别多的测试,新建对应的一个测试类

7.6 为应用程序构建测试API

7.6.3 把你的API介绍给开发人员

  1. 偶尔结对编程,一带一
  2. 准备小文档/速查表
  3. 在团队会议上讨论API变更
  4. 新人入职带过文档
  5. 进行测试审查

8 优秀单元测试的支柱

优秀测试

  1. 可靠
  2. 可维护
  3. 可读

8.1编写可靠测试

8.1.2避免测试中的逻辑

单元测试不应该有任何 switch if else for等语句

如果第一个断言失败了,你还会关心下一个断言的结果吗?如果会,就把它分为两个单元测试

8.2 编写可维护的测试

8.2.4 实施测试隔离

测试中的臭味道

  1. 强制的测试顺序
  2. 隐藏的测试调用
  3. 共享状态损坏: 测试共享内存里的状态,却没有状态回滚
  4. 外部共享状态损坏: 集成测试共享资源,却没有回滚资源

9 在组织中引入单元测试

这里一看就是一碗鸡汤,就看你干不干

9.1 变成倡导者

9.1.1 准备面对质疑

回答自己最难的问题

9.1.2 找到支持者和反对者

支持者: 教他们回答问题

反对者: 请他们参与其中的一些细节,切记不要告诉他们,他们哪里做得不好

9.1.3 找到可能的切入点

  1. 选择较少团队
  2. 经验少的一般愿意接受变革,经验多且墨守成规的,你很难改变他们,所以找一个技术经理愿意变革,且团队成员经验较浅的团队
  3. 经常性代码审查,要面对面的审查
  4. 自下而上

9.2 成功之道

9.2.4 使进度可见

9.2.5 设置具体目标

9.3 失败原因

9.3.3 不好的实现和第一印象

你自己要把整体的布局想好了,才开始实施,自己必须要牛逼,不然自己也不咋懂,就开始瞎弄,可能会丢掉以后的机会

9.3.4 缺少团队的支持

你应该逐个交谈,并回答他们的尖锐问题

这章主要讲心理学和人际交往学

主要考虑一下6个影响因素

  1. 个人能力: 你真正掌握这门技术吗
  2. 个人动机: 这个人把事情做对了吗,遇到困难能坚持吗
  3. 社会能力: 你是否给这个人提供帮组,在关键时刻
  4. 社会动机: 这个人周围的人是否鼓励正确的行为,反对你的人能否体现出其正确的行为
  5. 组织能力: 是否存在坏境因素,使其方便的提供帮助
  6. 组织动机: 如果你做了正确/错误的事情,能得到预期的回报吗

9.5 质疑和回答

9.5.6 我们有大量没有测试的代码: 应该从哪里开始

20%的代码包含80%的bug,从这里开始吧

10. 遗留代码

10.3 在重构前编写集成测试

有些代码无法单元测试

  1. 进行集成测试
  2. 重构
  3. 逐一单元测试

10.5 总结

要了解各个组件的依赖书和逻辑量,初学者可以先对最简单的进行测试

11.设计与可测试性

好的代码是可以测试的

© 404mzk all right reserved,powered by Gitbook该文件修订时间: 2017-04-06 01:42:56

results matching ""

    No results matching ""