图书介绍

Unit测试模式:测试码重构PDF|Epub|txt|kindle电子书版本网盘下载

Unit测试模式:测试码重构
  • (美)梅扎罗斯著 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302191384
  • 出版时间:2009
  • 标注页数:631页
  • 文件大小:117MB
  • 文件页数:681页
  • 主题词:软件-测试

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

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

热门推荐