C#测试驱动开发

C#测试驱动开发_第1张图片

基本信息
原书名:Professional Test Driven Development with C#
作者: James Bender    Jeff McWherter    [作译者介绍]
译者: 贾洪峰 李菊彦
出版社:清华大学出版社
ISBN:9787302279716
上架时间:2012-4-16
出版日期:2012 年3月
开本:16开
页码:301
版次:1-1

样章试读:http://product.china-pub.com/345067

编辑推荐:

连续三年荣获微软MVP作者Jeff最新力作

内容简介:

如果您希望编写易于实现和维护的可靠软件,那您需要使用测试驱动开发(tdd)。这本实用手册将向您展示如何创建高效的tdd过程。在用c#编写的源代码及示例的帮助下,作者带您从头到尾体验tdd方法,并向您展示如何将这一方法应用于一个现实应用程序中。在研究这个应用程序时,我们将从头构建它,执行开发过程中的每个步骤,解决出现的问题。相信您不久就能设计出自己成功的tdd过程。
  主要内容
  描述常见的软件问题,并提供了解决这些问题的重构实践
  展示了叮用于测试wpfsilverlight应用程序的模式
  在修复缺陷时,确保不会导致意料之外的副作用
  展示如何构建具有可测试性的mvc应用程序
  共享可用于测试wcf服务的简易步骤
  解释如何运行集成测试,以确保一切功能都与计划中的一致
  揭示一些最佳实践,用于编写易读、可维护的优秀测试作者简介

作者简介:

James BenderImproving Enterprises公司的技术副总裁,从事软件开发和基础体系结构设计已有17年。作为开发人员和体系结构设计师,他参与过各种各样的软件设计,既有小型的单用户应用程序,也有企业规模的多用户系统。他是一位经验丰富的顾问和作家,擅长于.NET开发与体系结构设计、SOAWCFWF、云计算和敏捷开发方法。

James致力于推动软件开发的封装,追求新的、更好的应用程序开发方式。在他的职业生涯之初,是用C++在基于SCO Unix的系统上开发信用卡处理应用程序。在20世纪90年代后期,James开始研究用基于JavaJSP页面和微软的ASP技术进行Web开发。他从.NET首次发布公共测试版就开始使用此工具。后来他继续研究.NET技术,重点是分布式计算范例(.NET Web服务使之成为可能),之后很自然地发展到对微软的WindowsCommunication Foundation(WCF)极为着迷。

2003年开始,James就开始实际应用敏捷方法,包括Scrum和极限编程(eXtreme ProgrammingXP)。在研究敏捷方法的同时,James开始探索测试驱动开发。他致力于向客户及软件开发社区的众多开发人员介绍在敏捷软件开发和测试驱动开发中用到的概念和技术。

JamesVisual C#方面的微软MVP、开发社区的活跃会员和Central Ohio .NET Developers Group(www.condg.org)的现任主席,并继续领导着Columbus ArchitectsGroup(www.colarc.org),还是nplus1.org第一方(first-party)内容的高级编辑,nplus1.org是一个面向体系结构设计师的教育网站。James的博客地址为www.jamescbender.com

Jeff McWherterGravity Works Design and Development的合伙人和开发经理,这家公司的办公室位于密歇根州兰辛市的老城区(Old Town District)Jeff毕业于密歇根州大学,拥有12年以上的专业软件开发经验,他还在微软获得了很多证书,包括微软认证解决方案开发员(MCSD)、微软认证数据库管理员(MCDBA)、微软认证应用程序开发员(MCAD)和微软认证技术工程师(MCTS)

2010年,Jeff连续第三年被评为“微软最有价值专家(MVP)”。同年,他荣获了由兰辛区域商会颁发的“Ten Over The Next Ten”奖项,这一奖项评选出会在接下来的10年间担负起重任的10位年轻专家。Jeff还是一位作家,Wrox出版社出版了他的Testing ASP.NET Web Applications一书。

作为一名作家和软件开发人员,Jeff还积极参与国内程序设计社区的开发,例如在会议上发言、组织Lansing Give Camp等活动,这些活动将开发人员和一些非盈利组织联合起来,共同参加一些志愿者项目。

 

目录

 

第Ⅰ部分  入    门

第1章  通向测试驱动开发之路    3

1.1  软件开发的经典方法 4

1.1.1  软件工程简史 4

1.1.2  从瀑布到迭代和递增   5

1.2  敏捷方法简介   6

1.2.1  敏捷方法简史 6

1.2.2  TDD的原理与实践  7

1.3  TDD背后的概念  8

1.3.1  作为设计方法的TDD    8

1.3.2  作为开发实践的TDD    8

1.4  TDD的优点  9

1.5  TDD方法的简单示例  10

1.6  本章小结   17

第2章  单元测试简介    19

2.1  什么是单元测试 20

2.1.1  单元测试的定义   20

2.1.2  什么不是单元测试 20

2.1.3  其他类型的测试   22

2.2  NUnit一览  24

2.2.1  什么是单元测试框架   24

2.2.2  NUnit基础知识    24

2.3  与模拟对象分离 28

2.3.1  模拟为什么重要   28

2.3.2  虚拟、伪对象、存根

和模拟  29

2.3.3  最佳实践与最差实践   35

2.4  Moq概览    35

2.4.1  模拟框架做些什么 36

2.4.2  关于Moq  36

2.4.3  Moq基础知识  36

2.5  本章小结   40

第3章  重构速览    41

3.1  为何重构   42

3.1.1  项目的生命周期   42

3.1.2  可维护性 43

3.1.3  代码度量 43

3.2  整洁代码原则   45

3.2.1  OOP原则  45

3.2.2  SOLID原则    49

3.3  代码异味   52

3.3.1  什么是代码异味   52

3.3.2  重复代码和相似类 52

3.3.3  大型类和大型方法 53

3.3.4  注释 55

3.3.5  不当命名 55

3.3.6  特征依赖 56

3.3.7  If/Switch过多    57

3.3.8  Try/Catch过多    58

3.4  典型重构   59

3.4.1  析取类或接口 60

3.4.2  析取方法 61

3.4.3  重命名变量、字段、方法

和类    66

3.4.4  封装字段 66

3.4.5  用多态替换条件   67

3.4.6  允许类型推断 70

3.5  本章小结   71

第4章  测试驱动开发:以测试为

指南    73

4.1  从测试开始 74

4.2  红灯、绿灯、重构   76

4.2.1  TDD的3个阶段    76

4.2.2  “红灯”阶段 77

4.2.3  “绿灯”阶段 77

4.2.4  “重构”阶段 78

4.2.5  重新开始 78

4.3  重构示例   79

4.3.1  第一项功能   79

4.3.2  通过第一个测试   82

4.3.3  第二项功能   83

4.3.4  重构单元测试 85

4.3.5  第三项功能   86

4.3.6  重构业务代码 88

4.3.7  纠正重构缺陷 90

4.3.8  第四项功能   92

4.4  本章小结   94

第5章  模拟外部资源    95

5.1  依赖项注入模式 96

5.2  抽象数据访问层 106

5.2.1  将对数据库的关注移出业务

代码    106

5.2.2  将数据与存储库模式

隔离    106

5.2.3  注入存储库   107

5.2.4  模拟存储库   110

5.3  本章小结   111

第Ⅱ部分  将基础知识变为行动

第6章  启动示例应用程序    115

6.1  定义项目   116

6.1.1 开发项目综述 116

6.1.2  定义目标环境 117

6.1.3  选择应用程序技术 118

6.2  定义用户情景   118

6.2.1  收集情景 118

6.2.2  确定待办事项表   120

6.3  敏捷开发过程   121

6.3.1  估计 121

6.3.2  迭代工作 122

6.3.3  团队内部交流 124

6.3.4  零次迭代:第一次迭代 124

6.3.5  零次迭代中的测试 124

6.3.6  结束迭代 125

6.4  创建项目   126

6.4.1  选择框架 126

6.4.2  定义项目结构 128

6.5  本章小结   132

第7章  实现第一个用户情景  133

7.1  第一个测试 134

7.1.1  选择第一个测试   134

7.1.2  为测试命名   135

7.1.3  编写测试 136

7.2  实现功能   144

7.2.1  编写能够正常工作的最简单

代码    144

7.2.2  运行可以通过的测试   153

7.2.3  编写下一个测试   153

7.3  通过重构来改进代码 160

7.4  多角度测试 161

7.5  本章小结   161

第8章  集成测试    163

8.1  早集成、常集成 164

8.2  编写集成测试   165

8.2.1  如何管理数据库   165

8.2.2  如何编写集成测试 166

8.2.3  端对端集成测试   185

8.2.4  使各类测试保持分离   185

8.3  运行集成测试的时机和

方式    185

8.4  本章小结   186

第Ⅲ部分  TDD方案

第9章 Web上的TDD 191

9.1  ASP.NET Web窗体    192

9.2  使用ASP.NET MVC    204

9.2.1  MVC 101  205

9.2.2  Microsoft ASP.NET

MVC3.0 205

9.2.3  使用MVC Contrib项目 214

9.2.4  ASP.NET MVC汇总  214

9.3  使用JavaScript 214

9.4  本章小结   220

第10章  测试WCF服务   221

10.1  应用程序中的WCF服务  222

10.2  测试WCF服务  222

10.2.1  为实现可测试性进行

重构    223

10.2.2  向服务引入依赖项注入    225

10.2.3  编写测试    230

10.2.4  实现依赖项的存根    233

10.2.5  验证结果    237

10.2.6  要留意的问题多发

区域    237

10.3  本章小结  238

第11章  测试WPF和Silverlight应用

程序    239

11.1  测试用户界面时的问题  240

11.1.1  MVVM模式    240

11.1.2  MVVM如何使WPF/

Silverlight应用程序

可测试  243

11.1.3  将所有内容结合

在一起  255

11.2  本章小结  258

第Ⅳ部分  需求和工具

第12章  应对缺陷和新的需求 261

12.1  处理修改  262

12.1.1  修改的发生  262

12.1.2  从测试开始  264

12.1.3  修改代码    266

12.1.4  使测试保持通过状态  269

12.2  本章小结  270

第13章  有关优秀工具的争论 271

13.1  测试运行程序  271

13.1.1  TestDriven.NET  272

13.1.2  Developer Express测试

运行程序    272

13.1.3  Gallio  273

13.2  单元测试框架  274

13.2.1  MSTest  274

13.2.2  MbUnit  275

13.2.3  xUnit   276

13.3  模拟框架  277

13.3.1  Rhino Mocks 277

13.3.2  Type Mock   279

13.4  依赖项注入框架    281

13.4.1  Structure Map   281

13.4.2  Unity   283

13.4.3  Windsor 284

13.4.4  Autofac 285

13.5  其他有用工具  286

13.5.1  nCover  287

13.5.2  PEX 287

13.6  如何向团队介绍TDD 288

13.6.1  在拒绝改变的环境中

工作    289

13.6.2  在接受改变的环境中

工作    289

13.7  本章小结  289

第14章  结论   291

14.1  已经学到的内容    292

14.1.1  你是自己代码的客户  292

14.1.2  逐步找出解决方案    292

14.1.3  用调试器作为手术

器械    293

14.2  TDD最佳实践   293

14.2.1  使用有意义的名字    293

14.2.2  为一个功能单元至少编写

一个测试    294

14.2.3  保持模拟的简单性    294

14.3  TDD的好处 294

14.4  如何向团队介绍TDD 295

14.5  本章小结  296

附录A  TDD Katas    299

 

 

你可能感兴趣的:(C#测试驱动开发)