图书介绍
单元测试的艺术 第2版pdf电子书版本下载
- (以)ROYOSHEROVE著;金迎译 著
- 出版社: 北京:人民邮电出版社
- ISBN:9787115360359
- 出版时间:2014
- 标注页数:228页
- 文件大小:116MB
- 文件页数:246页
- 主题词:软件-测试
PDF下载
下载说明
单元测试的艺术 第2版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如 BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一部分 入门 2
第1章 单元测试基础 2
1.1逐步定义单元测试 2
1.1.1编写优秀单元测试的重要性 4
1.1.2我们都写过(某种)单元测试 4
1.2优秀单元测试的特性 5
1.3集成测试 5
1.4什么是优秀的单元测试 9
1.5一个简单的单元测试范例 9
1.6测试驱动开发 12
1.7成功进行TDD的三种核心技能 15
1.8小结 15
第2章 第一个单元测试 17
2.1单元测试框架 18
2.1.1单元测试框架提供什么 18
2.1.2 xUnit框架 20
2.2 LogAn项目介绍 20
2.3 NUnit初步 20
2.3.1安装NUnit 21
2.3.2加载解决方案 22
2.3.3在代码中使用NUnit属性 24
2.4编写第一个测试 25
2.4.1 Assert类 25
2.4.2用NUnit运行第一个测试 26
2.4.3添加正检验 27
2.4.4从红到绿:测试成功 28
2.4.5测试代码格式 28
2.5使用参数重构测试 28
2.6更多NUnit属性 30
2.6.1 setup和teardown 30
2.6.2检验预期的异常 33
2.6.3忽略测试 35
2.6.4 NUnit的方法语法 36
2.6.5设置测试类别 37
2.7测试系统状态的改变而非返回值 37
2.8小结 41
第二部分 核心技术 44
第3章 使用存根破除依赖 44
3.1存根简介 44
3.2发现LogAn中对文件系统的依赖 45
3.3如何使测试LogAnalyzer变得容易 46
3.4重构代码设计以提高可测试性 48
3.4.1抽取接口使底层实现可替换 49
3.4.2依赖注入:在被测试单元中注入一个伪实现 51
3.4.3在构造函数层注入一个伪对象(构造函数注入) 51
3.4.4用伪对象模拟异常 55
3.4.5用属性get或set注入伪对象 56
3.4.6在方法调用前注入伪对象 57
3.5重构技术变种 63
3.6克服封装问题 65
3.6.1使用internal和[InternalsVisibleTo] 65
3.6.2使用[Conditional]属性 66
3.6.3使用#if和#endif进行条件编译 66
3.7小结 67
第4章 使用模拟对象进行交互测试 68
4.1基于值的测试、基于状态的测试和交互测试 68
4.2模拟对象和存根的区别 70
4.3手工模拟对象的简单示例 71
4.4同时使用模拟对象和存根 73
4.5每个测试一个模拟对象 78
4.6伪对象链:用存根生成模拟对象或其他存根 78
4.7手工模拟对象和存根的问题 79
4.8小结 80
第5章 隔离(模拟)框架 81
5.1为什么要使用隔离框架 81
5.2动态生成伪对象 83
5.2.1在测试中使用NSubstitute 83
5.2.2用动态伪对象替换手工伪对象 84
5.3模拟值 86
5.4测试事件相关的活动 92
5.4.1测试事件监听者 92
5.4.2测试事件是否触发 93
5.5现有的.NET隔离框架 94
5.6隔离框架的优缺点 95
5.6.1使用隔离框架时应避开的陷阱 96
5.6.2测试代码不可读 96
5.6.3验证错误的事情 96
5.6.4一个测试多个模拟对象 96
5.6.5过度指定测试 97
5.7小结 97
第6章 深入了解隔离框架 99
6.1受限框架及不受限框架 99
6.1.1受限框架 99
6.1.2不受限框架 100
6.1.3基于探查器的不受限框架如何工作 101
6.2优秀隔离框架的价值 103
6.3支持适应未来和可用性的功能 103
6.3.1递归伪对象 104
6.3.2默认忽略参数 104
6.3.3泛伪造 105
6.3.4伪对象的非严格行为 105
6.3.5非严格模拟对象 106
6.4隔离框架设计反模式 106
6.4.1概念混淆 106
6.4.2录制和重放 107
6.4.3粘性行为 109
6.4.4复杂语法 109
6.5小结 109
第三部分 测试代码 112
第7章 测试层次和组织 112
7.1运行自动化测试的自动化构建 112
7.1.1构建脚本结构 113
7.1.2触发构建和集成 115
7.2基于速度和类型布局测试 116
7.2.1分离集成测试和单元测试的人为因素 117
7.2.2绿色安全区 117
7.3确保测试是源代码管理的一部分 118
7.4将测试类映射到被测试代码 118
7.4.1将测试映射到项目 118
7.4.2将测试映射到类 118
7.4.3将测试映射到具体的工作单元入口 119
7.5注入横切关注点 120
7.6为应用程序构建测试API 122
7.6.1使用测试类继承模式 122
7.6.2创建测试工具类和方法 133
7.6.3把你的API介绍给开发人员 134
7.7小结 134
第8章 优秀单元测试的支柱 136
8.1编写可靠的测试 136
8.1.1决定何时删除或修改测试 137
8.1.2避免测试中的逻辑 140
8.1.3只测试一个关注点 142
8.1.4把单元测试和集成测试分开 143
8.1.5用代码审查确保代码覆盖率 143
8.2编写可维护的测试 144
8.2.1测试私有或受保护的方法 145
8.2.2去除重复代码 146
8.2.3以可维护的方式使用setup方法 149
8.2.4实施测试隔离 151
8.2.5避免对不同关注点多次断言 156
8.2.6对象比较 158
8.2.7避免过度指定 160
8.3编写可读的测试 162
8.3.1单元测试命名 162
8.3.2变量命名 163
8.3.3有意义的断言 164
8.3.4断言和操作分离 165
8.3.5 setup和teardown 165
8.4小结 166
第四部分 设计和流程 168
第9章 在组织中引入单元测试 168
9.1逐步成为变革的倡导者 168
9.1.1准备好面对质疑 169
9.1.2说服组织内成员:支持者和反对者 169
9.1.3找到可能的切入点 169
9.2成功之道 171
9.2.1游击式实现(自下而上) 171
9.2.2说服高层(自上而下) 171
9.2.3引入外援 172
9.2.4使进度可见 172
9.2.5设定具体目标 173
9.2.6应对障碍 175
9.3失败原因 175
9.3.1缺少驱动力 175
9.3.2缺乏政策支持 175
9.3.3不好的实现和第一印象 176
9.3.4缺少团队支持 176
9.4影响因素 176
9.5质疑和回答 177
9.5.1单元测试会给现有流程增加多少时间 178
9.5.2单元测试是否会抢了QA饭碗 179
9.5.3证明单元测试确实有效的方法 179
9.5.4单元测试有用的证据 180
9.5.5 QA部门还是能找到缺陷的原因 180
9.5.6我们有大量没有测试的代码:应该从哪里开始 181
9.5.7我们使用多种编程语言:单元测试是否可行 181
9.5.8软硬件结合的开发 181
9.5.9确保测试中没有缺陷的方法 181
9.5.10我的代码已经调试通过了,但还需要测试的原因 182
9.5.11驱动开发测试的必要性 182
9.6小结 182
第10章 遗留代码 183
10.1从哪里开始增加测试 183
10.2决定选择策略 185
10.2.1先易后难策略的优缺点 185
10.2.2先难后易策略的优缺点 186
10.3在重构前编写集成测试 186
10.4遗留代码单元测试的重要工具 187
10.4.1使用不受限的隔离框架轻松隔离依赖项 187
10.4.2使用JMockit 测试Java遗留代码 189
10.4.3重构Java代码时使用Vise 190
10.4.4重构前使用验收测试 191
10.4.5阅读Michael Feathers关于遗留代码的书 192
10.4.6使用NDepend调查产品代码 192
10.4.7使用ReSharper浏览和重构产品代码 192
10.4.8使用Simian和TeamCity发现重复代码(和缺陷) 193
10.5小结 193
第11章 设计与可测试性 194
11.1为什么在设计时要关心可测试性 194
11.2可测试性的设计目标 195
11.2.1默认情况下将方法设置为虚拟方法 195
11.2.2使用基于接口的设计 196
11.2.3默认情况下将类设置为非密封的 196
11.2.4避免在包含逻辑的方法内初始化具体类 197
11.2.5避免直接调用静态方法 197
11.2.6避免在构造函数和静态构造函数中包含逻辑代码 197
11.2.7把单例逻辑和单例持有者分开 198
11.3可测试性设计的利弊 199
11.3.1工作量 199
11.3.2复杂度 200
11.3.3泄露敏感知识产权 200
11.3.4有时无法实现 200
11.4可测试性设计的替代方法 200
11.5难以测试的设计示例 202
11.6小结 205
11.7更多资源 206
附录A 工具和框架 208