图书介绍
Unit测试模式:测试码重构PDF|Epub|txt|kindle电子书版本网盘下载
![Unit测试模式:测试码重构](https://www.shukui.net/cover/26/30115319.jpg)
- (美)梅扎罗斯著 著
- 出版社: 北京:清华大学出版社
- ISBN:9787302191384
- 出版时间:2009
- 标注页数:631页
- 文件大小:117MB
- 文件页数:681页
- 主题词:软件-测试
PDF下载
下载说明
Unit测试模式:测试码重构PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第Ⅰ部分 总述3
第1章 概览3
1.1关于本章3
1.2可能有效的最简单的测试自动化策略3
开发过程3
客户测试4
单元测试5
易测性设计5
测试组织6
1.3接下来要讨论的问题6
第2章 测试味道7
2.1关于本章7
2.2测试味道简介7
什么是测试味道7
测试味道的种类8
如何处理味道8
2.3味道的种类9
项目味道9
行为味道10
代码味道11
2.4接下来要讨论的问题12
第3章 测试自动化的目标13
3.1关于本章13
3.2为什么要测试13
3.3测试自动化的目标14
测试应该有助于提高质量15
测试应该有助于理解SUT16
测试应该降低(而不是引入)风险16
测试应该易于运行17
测试应该易于写和维护19
随着系统的发展,测试应该只需要最低限度的维护20
3.4接下来要讨论的问题20
第4章 测试自动化的基本观点21
4.1关于本章21
4.2这些基本观点的重要性21
4.3一些不同的基本观点22
首先测试还是最后测试22
测试还是示例22
逐个测试还是全部一起测试22
从外到内还是从内到外23
状态验证还是行为验证24
事先进行夹具设计还是逐个测试25
4.4理解不同观点的存在25
4.5我的基本观点25
4.6接下来要讨论的问题26
第5章 测试自动化的原则27
5.1关于本章27
5.2原则27
原则:首先写测试(也称为测试驱动开发、测试优先开发)27
原则:易测性设计28
原则:使用前门优先(也称为前门优先)28
原则:交流意图(也称为高级语言,简单易读)28
原则:不要修改SUT28
原则:保持测试独立(也称为独立测试)29
原则:隔离SUT29
原则:最小化测试重叠30
原则:最小化不可测试的代码30
原则:保持测试逻辑与产品代码分离(也称为产品代码中无测试逻辑)31
原则:每个测试验证一种条件(也称为单一条件测试)31
原则:单独测试关注点32
原则:确保相同标准的努力和责任32
5.3接下来要讨论的问题32
第6章 测试自动化策略33
6.1关于本章33
6.2什么是策略33
6.3应该自动化哪些类型的测试34
总功能性测试34
交叉功能测试35
6.4使用哪些工具来自动化各种测试36
测试自动化的方法37
xUnit简介38
使用xUnit的最佳时机39
6.5使用哪种测试夹具策略39
什么是夹具40
主要的夹具策略40
暂时新鲜夹具42
永久新鲜夹具42
共享的夹具策略43
6.6如何确保易测性44
最后测试——非常危险44
易测性设计——在最前面44
测试驱动易测性45
控制点和观察点45
交互风格与易测性模式46
划分与测试49
6.7接下来要讨论的问题50
第7章 xUnit基础51
7.1关于本章51
7.2 xUnit简介51
7.3共同特征51
7.4最低要求52
定义测试53
什么是夹具53
定义测试套件53
运行测试54
测试结果54
7.5 xUnit的本质55
测试命令56
测试套件对象56
7.6过程化世界里的xUnit57
7.7接下来要讨论的问题57
第8章 暂时夹具管理59
8.1关于本章59
8.2测试夹具术语59
什么是夹具60
什么是新鲜夹具60
什么是暂时新鲜夹具61
8.3建立新鲜夹具61
内联夹具建立61
委托夹具建立62
隐式夹具建立63
SetUp方法的滥用64
混合夹具建立65
8.4拆卸暂时新鲜夹具65
8.5接下来要讨论的问题65
第9章 永久夹具管理67
9.1关于本章67
9.2管理永久新鲜夹具67
什么让夹具变得永久67
永久新鲜夹具产生的问题68
拆卸永久新鲜夹具68
避免拆卸的需要71
处理缓慢测试72
9.3管理共享的夹具72
访问共享夹具73
引发共享夹具结构73
9.4接下来要讨论的问题75
第10章 结果验证77
10.1关于本章77
10.2让测试自检77
10.3状态验证78
使用内置断言79
Delta断言80
外部结果验证80
10.4验证行为80
过程行为验证81
预期行为规范82
10.5减少测试码复制82
预期对象83
自定义断言84
结果描述验证方法84
参数化测试和数据驱动测试85
10.6避免条件测试逻辑86
排除if语句87
排除循环87
10.7其他方法88
逆向操作,由外到内88
使用测试驱动开发来写测试实用程序方法88
10.8将可重复使用的验证逻辑放在哪里89
10.9接下来要讨论的问题89
第11章 使用测试替身91
11.1关于本章91
11.2什么是间接输入和间接输出91
为什么要关注间接输入91
为什么要关注间接输出92
如何控制间接输入93
如何验证间接输出94
11.3使用替身测试96
测试替身的类型97
提供测试替身102
配置测试替身103
安装测试替身104
11.4测试替身的其他用法108
内窥镜测试108
需求驱动开发108
加速夹具建立108
加速测试执行109
11.5其他需要考虑的问题109
11.6接下来要讨论的问题109
第12章 组织测试111
12.1关于本章111
12.2基本的xUnit机制111
12.3合理精简测试方法111
12.4测试方法和测试用例类113
每个类一个测试用例类113
每种特征一个测试用例类113
每个夹具一个测试用例类114
选择测试方法组织策略115
12.5测试命名约定115
12.6组织测试套件116
运行测试组117
运行单个测试117
12.7测试码重用118
测试实用程序方法位置118
测试用例继承与重用119
12.8测试文件组织119
内置自测119
测试程序包120
测试依赖120
12.9接下来要讨论的问题120
第13章 使用数据库的测试121
13.1关于本章121
13.2使用数据库的测试121
数据库测试的原因121
数据库带来的问题122
13.3不使用数据库的测试123
13.4测试数据库124
测试存储过程124
测试数据访问层125
确保开发人员独立125
13.5使用数据库测试(再次!)126
13.6接下来要讨论的问题126
第14章 有效测试自动化的路线图127
14.1关于本章127
14.2测试自动化的困难127
14.3高度可维护的自动化测试的路线图128
执行快乐路径代码129
验证快乐路径的直接输出129
验证备选路径129
验证间接输出行为130
最优化测试执行和维护130
14.4接下来要讨论的问题131
第Ⅱ部分 测试味道135
第15章 代码味道135
15.1模糊测试(也称为长测试、复杂测试、冗长测试)135
症状135
影响135
原因135
解决方案模式145
15.2条件测试逻辑(也称为缩排的测试码)146
症状146
影响147
原因147
15.3难以测试的代码152
症状153
影响153
解决方案模式153
原因153
15.4测试码复制155
症状155
影响156
原因156
高级阅读157
15.5产品中的测试逻辑158
症状158
影响158
原因158
高级阅读161
第16章 行为味道163
16.1断言滚轮163
症状163
影响163
原因163
高级阅读165
16.2不稳定测试165
症状165
影响166
检修建议166
原因166
16.3脆弱测试173
症状174
影响174
检修建议174
原因175
高级阅读179
16.4频繁调试(也称为手动调试)179
症状179
原因179
影响180
解决方案模式180
16.5手动干预180
症状180
影响180
原因181
高级阅读182
16.6缓慢测试182
症状182
影响182
检修建议183
原因183
第17章 项目味道187
17.1缺陷测试187
症状187
影响187
原因187
检修建议188
解决方案模式188
17.2开发人员没有写测试189
症状189
影响189
原因189
检修建议190
17.3高测试维护成本190
症状190
影响191
原因191
检修建议192
17.4产品缺陷192
症状192
影响192
原因192
第Ⅲ部分 模式201
第18章 测试策略模式201
18.1记录测试(也称为记录与回放测试、机器人用户测试、捕获/回放测试)201
运行原理202
使用时机202
实现方式说明203
示例:内置测试记录203
示例:商业记录与回放测试工具204
重构说明206
示例:重构的商业记录测试206
高级阅读207
18.2脚本测试(也称为手写测试、手动编码测试、程序测试、自动化单元测试)207
运行原理208
使用时机208
实现方式说明208
示例:脚本测试208
关于名称209
高级阅读209
18.3数据驱动测试209
运行原理210
使用时机210
实现方式说明211
启发示例213
重构说明214
示例:使用XML数据文件的xUnit数据驱动测试214
示例:使用CSV输入文件的xUnit数据驱动测试215
示例:使用Fit架构的数据驱动测试216
18.4测试自动化架构217
运行原理218
这样做的原因218
实现方式说明218
示例:测试自动化架构219
高级阅读219
18.5最小夹具(也称为最小上下文)220
这样做的原因220
实现方式说明220
18.6标准夹具(也称为标准上下文)221
运行原理222
使用它的时机222
实现方式说明223
启发示例224
重构说明224
示例:标准夹具225
18.7新鲜夹具(也称为新鲜上下文、私有夹具)226
运行原理226
使用时机226
实现方式说明227
保留夹具的原因227
新鲜夹具建立228
启发示例229
重构说明229
示例:新鲜夹具229
18.8共享夹具(也称为共享上下文、遗留夹具、重用的夹具、陈旧夹具)230
运行原理231
使用时机231
实现方式说明234
重构说明235
示例:共享夹具235
示例:不可变的共享夹具237
18.9后门操作(也称为层交叉测试)238
运行原理238
使用时机238
实现方式说明240
启发示例241
重构说明242
示例:使用测试间谍的后门结果验证242
示例:后门夹具建立242
高级阅读244
18.10层测试(也称为单层测试、逐层测试或分层测试)245
运行原理246
使用时机246
实现方式说明247
启发示例248
重构说明249
示例:表示层测试249
示例:皮下测试250
示例:业务层测试251
第19章 xUnit基本模式253
19.1测试方法253
运行原理253
这样做的原因254
实现方式说明254
示例:简单成功测试256
示例:使用try/catch的预期异常测试257
示例:使用方法属性的预期异常测试258
示例:使用代码块/闭包的预期异常测试258
示例:构造函数测试259
19.2四阶段测试260
运行原理261
这样做的原因261
实现方式说明262
示例:四阶段测试(内联)262
示例:四阶段测试(隐式建立/拆卸)262
19.3断言方法263
运行原理264
这样做的原因264
实现方式说明264
启发示例266
重构说明267
示例:相等性断言268
示例:模糊相等性断言268
示例:确定结果断言268
示例:预期异常断言268
示例:单一结果断言269
19.4断言消息269
运行原理269
使用时机269
实现方式说明270
启发示例270
重构说明271
示例:异常描述消息271
19.5测试用例类271
运行原理272
这样做的原因272
实现方式说明273
示例:测试用例类273
高级阅读274
19.6测试运行器274
运行原理275
这样做的原因275
实现方式说明275
19.7测试用例对象278
运行原理278
这样做的原因278
实现方式说明279
示例:测试用例对象280
19.8测试套件对象281
运行原理281
这样做的原因281
实现方式说明282
示例:测试套件对象282
示例:使用测试枚举构建的套件的套件283
示例:测试套件过程284
19.9测试发现286
运行原理286
使用时机286
实现方式说明287
启发示例287
重构说明288
示例:测试方法发现(使用方法命名和编译器宏)288
示例:测试方法发现(使用方法命名)288
示例:测试方法发现(使用方法属性)289
示例:测试用例类发现(使用类属性)290
示例:测试用例类发现(使用公共位置和测试用例超类)290
19.10测试枚举(也称为:测试套件工厂)290
运行原理291
使用它的时机291
实现方式说明291
示例:CppUnit中的测试方法枚举292
示例:测试方法调用(硬编码的)293
示例:测试套件枚举293
19.11测试选择294
运行原理294
使用时机294
实现方式说明295
示例:使用类属性的测试用例类选择295
示例:使用方法属性的测试方法选择295
第20章 夹具建立模式297
20.1内联建立297
运行原理298
使用时机298
实现方式说明298
示例:内联建立298
重构说明299
20.2委托建立299
运行原理300
使用时机300
实现方式说明300
启发示例300
重构说明301
示例:委托建立301
20.3创建方法302
运行原理303
使用时机303
实现方式说明305
启发示例305
重构说明306
示例:匿名创建方法306
示例:参数化创建方法307
示例:附件方法307
示例:重复用于夹具建立的测试308
20.4隐式建立(也称为:挂钩建立、调用架构建立、共享建立方法)309
运行原理310
使用时机310
实现方式说明310
启发示例311
重构说明312
示例:隐式建立312
20.5预制夹具(也称为:预制上下文、测试台)313
运行原理313
使用时机313
实现方式说明314
启发示例315
重构说明316
示例:预制夹具测试316
示例:夹具建立测试用例316
示例:使用数据填充脚本的预制夹具建立317
20.6延迟建立317
运行原理318
使用时机318
实现方式说明319
启发示例319
重构说明321
示例:延迟建立321
20.7套件夹具建立322
运行原理323
使用时机323
实现方式说明323
启发示例324
重构说明325
示例:套件夹具建立325
关于名称327
高级阅读327
20.8建立装饰器327
运行原理328
使用时机328
实现方式说明328
启发示例330
重构说明330
示例:硬编码的建立装饰器330
示例:参数化建立装饰器331
示例:抽象装饰器类332
20.9链接测试332
运行原理333
使用时机333
实现方式说明334
启发示例335
重构说明336
示例:链接测试336
第21章 结果验证模式339
21.1状态验证(也称为:基于状态的测试)339
运行原理340
使用时机340
实现方式说明340
启发示例341
重构说明342
示例:过程状态验证342
示例:预期对象342
21.2行为验证(也称为:交互测试)343
运行原理343
使用时机344
实现方式说明344
启发示例345
重构说明346
示例:过程行为验证346
示例:预期行为规范347
21.3自定义断言(也称为:预约断言)347
工作原理348
使用时机348
实现方式说明350
启发示例351
重构说明352
示例:自定义断言352
示例:域断言353
示例:验证方法354
示例:自定义断言测试355
21.4 Delta断言356
运行原理356
使用时机357
实现方式说明357
启发示例358
重构说明358
示例:Delta断言358
21.5哨兵断言359
运行原理360
使用时机360
实现方式说明360
启发示例361
重构说明361
示例:简单哨兵断言361
示例:共享夹具哨兵断言362
21.6未完成的测试断言362
运行原理363
使用时机363
实现方式说明363
启发示例364
重构说明364
示例:未完成的测试断言364
示例:使用模板的未完成的测试方法生成365
第22章 夹具拆卸模式367
22.1无用单元收集拆卸367
运行原理367
使用时机368
实现方式说明368
启发示例368
重构说明369
示例:无用单元收集拆卸369
22.2自动拆卸(也称为:测试对象注册库)369
运行原理370
使用时机370
实现方式说明370
启发示例371
重构说明372
示例:自动拆卸372
示例:自动执行拆卸374
22.3内联拆卸374
运行原理375
使用时机375
实现方式说明376
启发示例376
示例:天真内联拆卸377
重构说明377
示例:内联拆卸377
示例:拆卸哨兵子句378
示例:多种资源内联378
拆卸(Java)378
示例:委托拆卸379
22.4隐式拆卸(也称为:关联拆卸、调用架构拆卸、拆卸方法)380
运行原理381
使用时机381
实现方式说明381
启发示例381
重构说明382
示例:隐式拆卸382
第23章 测试替身模式385
23.1测试替身(也称为冒名顶替者)385
运行原理386
使用时机386
实现方式说明388
示例:测试替身389
23.2测试桩(也称为:桩)390
运行原理390
使用时机390
实现方式说明391
启发示例392
重构说明393
示例:响应器(作为手动编码的测试桩)393
示例:响应器(动态生成)394
示例:破坏者(作为匿名内部类)395
示例:实体链裁剪395
高级阅读397
23.3测试间谍(也称为:间谍、记录测试桩)397
运行原理398
使用时机398
实现方式说明399
启发示例399
重构说明400
示例:测试间谍400
23.4仿制对象402
运行原理402
使用时机403
实现方式说明403
启发示例404
重构说明405
示例:仿制对象(手动编码的)405
示例:仿制对象(动态生成的)406
高级阅读407
23.5伪造对象(也称为:哑元)407
运行原理408
使用时机408
实现方式说明409
启发示例410
重构说明411
示例:伪造数据库411
高级阅读412
23.6可配置的测试替身(也称为:可配置的仿制对象、可配置的测试间谍、可配置的测试桩)412
运行原理413
使用时机413
实现方式说明413
启发示例415
重构说明417
示例:使用设置者的配置接口417
示例:使用表达式生成器的配置接口418
示例:配置模式419
23.7硬编码的测试替身(也称为:硬编码的仿制对象、硬编码的测试桩、硬编码的测试间谍)420
运行原理421
使用时机421
实现方式说明421
启发示例423
重构说明423
示例:测试替身类424
示例:自分流/回送424
示例:子类化内部测试替身425
示例:从伪类子类化的内部测试替身426
高级阅读428
23.8测试专用子类(也称为:测试专用扩充)429
运行原理429
使用时机430
实现方式说明431
启发示例431
重构说明433
示例:修改行为的子类(测试桩)433
示例:修改行为的子类(代替的单态)434
示例:提供行为的子类435
示例:定义测试专用相等性(修改行为的子类)436
示例:提供状态的子类437
第24章 测试组织模式439
24.1命名测试套件439
运行原理440
使用时机440
实现方式说明440
重构说明441
示例:全部测试套件441
示例:专用目的套件442
示例:单个测试套件442
示例:冒烟测试套件443
24.2测试实用程序方法444
运行原理444
使用时机445
实现方式说明447
启发示例447
重构说明448
示例:测试实用程序方法449
24.3参数化测试450
运行原理451
使用时机451
实现方式说明452
启发示例453
重构说明454
示例:参数化测试454
示例:独立表格测试455
示例:递增的表格测试456
示例:使用架构支持的表格测试(MbUnit)456
示例:循环驱动测试(枚举值)457
示例:循环驱动测试(计算值)457
24.4每个类一个测试用例类458
运行原理459
使用时机459
实现方式说明459
24.5每种特征一个测试用例类464
运行原理465
使用时机465
实现方式说明466
启发示例466
重构说明467
示例:每种特征一个测试用例类468
24.6每个夹具一个测试用例类469
运行原理470
使用时机470
实现方式说明471
启发示例471
重构说明473
示例:每个夹具一个测试用例类473
24.7测试用例超类(也称为抽象测试用例、抽象测试夹具、测试用例基类)475
运行原理476
使用时机476
实现方式说明477
启发示例477
重构说明477
示例:测试用例超类478
示例:测试辅助混入478
24.8测试辅助480
运行原理480
使用时机480
实现方式说明481
启发示例482
重构说明482
示例:使用类方法的测试辅助483
示例:使用实例方法的测试辅助483
第25章 数据库模式485
25.1数据库沙盒485
运行原理486
使用时机486
实现方式说明486
启发示例487
重构说明487
示例:数据库分区方案488
25.2存储过程测试488
运行原理489
使用时机489
实现方式说明489
启发示例491
重构说明492
示例:数据库内存储过程测试492
示例:远程存储过程测试493
25.3表格截断拆卸493
运行原理494
使用时机494
实现方式说明495
启发示例496
重构说明496
示例:表格截断(委托)拆卸测试496
示例:延迟拆卸测试497
示例:使用SQL的表格截断拆卸498
示例:使用ORM的表格截断拆卸498
25.4事务回滚拆卸499
运行原理500
使用时机500
实现方式说明501
启发示例502
重构说明502
示例:对象事务回滚拆卸503
示例:数据库事务回滚拆卸504
第26章 易测性设计模式507
26.1依赖注入507
运行原理507
使用时机508
实现方式说明508
启发示例510
重构说明510
示例:参数注入511
示例:构造函数注入511
示例:设置者注入512
26.2依赖查找(也称为:服务定位器、对象工厂、组件代理、组件注册库)513
运行原理514
使用时机514
实现方式说明515
启发示例516
重构说明517
示例:可配置的注册库517
示例:代替的单态518
关于名称520
26.3低级对象520
运行原理521
使用时机521
实现方式说明522
启发示例(低级可执行)524
重构说明525
示例:穷人的低级对象526
示例:真正低级可执行526
示例:低级对话528
示例:低级事务控制器531
26.4测试挂钩531
运行原理531
使用时机532
实现方式说明532
启发示例532
重构说明533
示例:被测系统的测试挂钩533
示例:依赖组件中的测试挂钩533
第27章 值模式535
27.1字面值(也称为:硬编码值、常量值)535
运行原理535
使用时机535
实现方式说明536
示例:字面值536
重构说明537
示例:符号常量537
示例:自述值537
示例:不同值538
27.2派生值(也称为:计算值)538
运行原理538
使用时机539
启发示例539
重构说明540
示例:派生预期540
示例:一种坏属性540
27.3生成值542
运行原理542
使用时机542
实现方式说明543
启发示例543
重构说明544
示例:不同生成值544
示例:相关生成值545
27.4哑元对象(也称为:哑元、哑元参数、哑元值、占位符、桩)545
运行原理546
使用时机546
实现方式说明546
启发示例547
重构说明548
示例:哑元值和哑元对象548
第Ⅳ部分 附录553
附录A 测试重构553
附录B xUnit术语559
附录C xUnit家族成员565
附录D 工具571
附录E 目标和原则577
附录F 味道、别名和原因579
附录G 模式、别名和变体583
术语表595
参考文献619