JUnit 实战第二版 中文目录

来源:互联网 发布:工程类 网络类 编辑:程序博客网 时间:2024/05/22 02:18
第1部分 认识JUnit 28
第1章 JUnit起步  30
1.1   证实它能运行  31
1.2   从零开始  33
1.3   理解单元测试框架  35
1.4   JUnit的设计目标  36
1.5   安装JUnit  36
1.6   使用JUnit测试  37
1.7   小结  40
第2章 探索JUnit的核心  41
2.1   探索JUnit核心  42
2.2   运行参数化测试  44
2.3   JUnit的测试运行器  45
2.3.1   测试运行器简介  45
2.3.2   JUnitCore fa?ade  46
2.3.3   自定义测试运行器  47
2.4   用Suite来组合测试  47
2.4.1   组合一组测试类  47
2.4.2   组合一组测试集  48
2.4.3   Suite、IDE、Ant与Maven  49
2.5   小结  50
第3章 掌握JUnit  51
3.1   引入controller组件  51
3.1.1   设计接口  52
3.1.2   实现基类  54
3.2   让我们来测试它  56
3.2.1   测试DefaultController  56
3.2.2   添加一个处理器  57
3.2.3   请求处理  60
3.2.4   改进testProcessRequest  64
3.3   测试异常处理  65
3.3.1   模拟异常条件  66
3.3.2   测试异常  69
3.4   超时测试  70
3.5   引入Hamcrest匹配器  72
3.6   创建测试项目  75
3.7   小结  76
第4章 软件测试原则  77
4.1   单元测试的必要性  78
4.1.1   带来更高的测试覆盖率  78
4.1.2   提高团队效率  78
4.1.3   监测衰退和减少调试  78
4.1.4   自信地重构  79
4.1.5   改进实现  79
4.1.6   将预期的行为文档化  80
4.1.7   启用代码覆盖率以及其他指标  80
4.2   测试类型  81
4.2.1   软件测试的4种类型  81
4.2.2   单元测试的3种类型  84
4.3   黑盒测试与白盒测试  85
4.4   小结  87


第2部分 不同的测试策略 88
第5章 测试覆盖率与开发  90
5.1   测量测试覆盖率  90
5.1.1   测试覆盖率简介  91
5.1.2   Cobertura简介  91
5.1.3   生成测试覆盖率报告  93
5.1.4   结合黑盒与白盒测试  94
5.2   编写可测试的代码  95
5.2.1   公共API是协议  95
5.2.2   减少依赖关系  95
5.2.3   创建简单的构造函数  96
5.2.4   遵循最少知识原则  97
5.2.5   避免隐藏的依赖关系与全局状态  97
5.2.6   单态模式的优点和缺点  98
5.2.7   优先使用通用方法  99
5.2.8   组合优先于继承  100
5.2.9   多态优先于条件语句  100
5.3    测试驱动开发  101
5.3.1    调整开发周期  101
5.3.2   TDD的两个步骤  102
5.4    在开发周期中的测试  103
5.5    小结  106
第6章 使用stub进行粗粒度测试  107
6.1   stub简介  108
6.2   使用stub测试一个HTTP连接  109
6.2.1   选择使用stub的方案  110
6.2.2   使用Jetty作为嵌入式服务器  111
6.3   使用stub替换Web服务器资源  113
6.3.1   建立第一个stub测试  113
6.3.2   针对故障情况进行测试  116
6.3.3   回顾第一个stub测试  117
6.4   替换连接  118
6.4.1   创建自定义的URL协议处理器  118
6.4.2   创建一个JDK的HttpURLConnection stub  119
6.4.3   运行测试  120
6.5   小结  121
第7章 使用mock objects进行测试  122
7.1    mock objects简介  123
7.2   使用mock objects进行单元测试  123
7.3   使用mock objects来重构  126
7.3.1   重构示例  127
7.4   替换一个HTTP连接  129
7.4.1   定义mock objects  130
7.4.2   测试一个简单的方法  131
7.4.3   第一次尝试:简单的方法重构技巧  131
7.4.4   第二个尝试:使用类工厂来重构  133
7.5   把mocks用作特洛伊木马  136
7.6   介绍mock框架  139
7.6.1   使用EasyMock  139
7.6.2   使用JMock  143
7.7   小结  146
第8章 容器内测试  148
8.1   标准单元测试的局限性  148
8.2   mock objects解决方案  149
8.3   容器内测试  151
8.3.1   实现策略  151
8.3.2   容器内测试框架  152
8.4   比较stub、mock objects和容器内测试  152
8.4.1   stub的优点与缺点  152
8.4.2   mock objects的优点和缺点  153
8.4.3   容器内测试的优点与缺点  154
8.4.4   容器内测试与容器外测试  156
8.5   小结  156


第3部分 JUnit与构建过程 158
第9章 从Ant中运行JUnit测试  160
9.1   生命中的一天  160
9.2   从Ant中运行测试  161
9.3   认识并安装Ant  162
9.4   Ant的目标、项目、属性以及任务  163
9.4.1   javac任务  165
9.4.2   JUnit任务  166
9.5   让Ant来执行任务  167
9.6   使用Ivy进行依赖管理  168
9.7   创建HTML报告  170
9.8   批处理测试  172
9.9   小结  174
第10章 从Maven2中运行JUnit测试  175
10.1   Maven的功能  176
10.1.1   约定优于配置  176
10.1.2   强大的依赖管理  177
10.1.3   Maven的构建生命周期  178
10.1.4   基于插件的架构  179
10.1.5   Maven项目对象模型  180
10.2   建立一个Maven项目  182
10.3   Maven插件的引入  186
10.3.1   Maven的Compiler插件  186
10.3.2   Maven的Surefire插件  187
10.3.3   使用Maven生成HTML格式的JUnit报告  189
10.4   Maven的不足  190
10.5   小结  191
第11章 持续集成工具  192
11.1   尝试持续集成  192
11.1.1   持续集成测试  193
11.2   拯救用户的CruiseControl  195
11.2.1   开始使用CruiseControl  195
11.2.2   创建一个示例项目  196
11.2.3   解析CruiseControl配置文件  196
11.3   另一个持续集成工具——Hudson  201
11.3.1   Hudson简介  202
11.3.2   安装  202
11.3.3   配置Hudson  203
11.3.4   配置Hudson中的项目  204
11.4   持续集成的优势  207
11.5   小结  207


第4部分 JUnit扩展 210
第12章 表示层的测试  212
12.1   选择测试框架  213
12.2   HtmlUnit简介  213
12.2.1   一个实例  213
12.3   编写HtmlUnit测试  214
12.3.1   HTML断言  214
12.3.2   对特定的Web浏览器进行测试  215
12.3.3   测试多个Web浏览器  215
12.3.4   创建独立的测试  216
12.3.5   导航对象模型  218
12.3.6   通过特定的元素类型访问元素  218
12.3.7   通过名字与索引访问元素  218
12.3.8   通过引用访问元素  219
12.3.9   使用XPath  220
12.3.10   测试失败和异常  221
12.3.11   应用程序与网络导航  222
12.3.12   使用HtmlUnit测试表单  224
12.3.13   测试框架(frame)  225
12.3.14   测试JavaScript  226
12.3.15   测试CSS  228
12.3.16   SSL错误  229
12.4   集成HtmlUnit和Cactus  229
12.4.1   在Cactus中编写测试  229
12.5   Selenium简介  231
12.6   生成Selenium测试  233
12.6.1   一个实例  233
12.7   运行Selenium测试  234
12.7.1   管理Selenium服务器  234
12.7.2   使用JUnit 4运行Selenium测试  235
12.8   编写Selenium测试  238
12.8.1   针对特定的Web浏览器进行测试  238
12.8.2   测试多个浏览器  239
12.8.3   应用程序和网络导航  241
12.8.4   通过引用访问元素  242
12.8.5   通过异常使测试失败  242
12.8.6   使用Selenium测试表单  243
12.8.7   测试JavaScript告警  243
12.8.8   捕获一个JUnit 3测试失败的截屏  244
12.8.9   捕获一个JUnit 4测试失败的截屏  244
12.9   HtmlUnit与Selenium  245
12.10   小结  246
第13章 Ajax测试  247
13.1   Ajax应用程序难以测试的原因  248
13.1.1   传统的Web交互  248
13.1.2   Ajax交互  248
13.1.3   一个崭新的世界  250
13.1.4   测试的挑战  250
13.2   Ajax的测试模式  250
13.2.1   功能测试  251
13.2.2   客户端脚本单元测试  251
13.2.3   服务测试  252
13.3   功能测试  252
13.3.1   使用Seleniun进行功能测试  252
13.3.2   使用HtmlUnit进行功能测试  256
13.4   JavaScript测试  258
13.4.1   使用RhinoUnit测试JavaScript  258
13.4.2   使用JsUnit测试JavaScript  261
13.4.3   编写JsUnit测试用例  261
13.4.4   编写JsUnit测试集  263
13.4.5   手动运行JsUnit测试用例  264
13.4.6   使用Ant自动运行JsUnit测试用例  265
13.5   RhinoUnit与JsUnit  268
13.6   使用JSLint检验最佳实践  268
13.7   使用HttpClient测试服务  270
13.7.1   调用XML服务  270
13.7.2   验证XML响应  271
13.7.3   验证JSON响应  272
13.8   测试Google Web工具箱应用程序  274
13.8.1   为GWT应用程序选择测试框架  274
13.8.2   手动创建GWTTestCase  276
13.8.3   使用junitCreator创建GWTTestCase  278
13.8.4   运行测试用例  279
13.8.5   安装和拆卸测试  279
13.8.6   创建测试集  279
13.8.7   运行测试集  280
13.9   小结  280
第14章 使用Cactus进行服务器端的Java测试  282
14.1   什么是Cactus?  283
14.2   使用Cactus进行测试  283
14.2.1   你可以使用Cactus测试的Java组件  283
14.2.2   一般原则  284
14.2.3   Cactus如何工作  286
14.3   测试servlet和filters  288
14.3.1   介绍管理应用程序  289
14.3.2   使用Cactus编写servlet测试  289
14.4   测试JSP  295
14.4.1   回顾管理应用程序  295
14.4.2   什么是JSP单元测试?  296
14.4.3   单独使用Cactus对JSP进行单元测试  296
14.4.4   利用SQL结果数据执行JSP  297
14.5   测试EJB  299
14.6   什么是Cargo?  301
14.7   使用Ant执行Cactus测试  302
14.7.1   用来准备文件的Cactus  302
14.8   使用Maven2x执行Cactus测试  307
14.8.1   Maven2 cactifywar MOJO  307
14.8.2   Maven2 cactifyear MOJO  311
14.9   从浏览器执行Cactus测试  312
14.10   小结  313
第15章 测试JSF应用程序  314
15.1   引入JSF  315
15.2   介绍示例应用程序  316
15.3   测试JSF应用程序时的典型问题  322
15.4   测试JSF应用程序的策略  323
15.4.1   黑盒方法  323
15.4.2   Mock object援救  323
15.5   使用JSUnit测试示例应用程序  325
15.5.1   从浏览器执行一个JSFUnit测试  326
15.5.2   使用JSFUnit测试Ajax  326
15.6   使用HtmlUnit与JSFUnit  328
15.7   JSF应用程序的性能测试  329
15.8   小结  331
第16章 测试OSGi组件  332
16.1   OSGi简介  333
16.2   第一个OSGi服务  334
16.2.1   示例应用程序  337
16.3   测试OSGi服务  340
16.3.1   Mock objects  340
16.4   引入JUnit4OSGi  343
16.5   小结  347
第17章 测试数据库访问  348
17.1   数据库单元测试的阻抗不匹配  349
17.1.1   单元测试必须执行隔离的代码  349
17.1.2   单元测试必须易于编写和运行  349
17.1.3   单元测试必须运行快速  350
17.2   DbUnit介绍  350
17.2.1   示例应用程序  351
17.2.2   设置DbUnit并运行示例应用程序  352
17.3   使用数据集来填充数据库  352
17.3.1   剖析DatabaseOperation  356
17.4   用数据集断言数据库状态  357
17.4.1   过滤数据集  359
17.4.2   忽略数据列  359
17.5   使用ReplacementDataSet转换数据  361
17.5.1   使用ReplacementDataSet处理不同的ID问题  361
17.5.2   处理NULL值  363
17.6   从已有的数据库数据中创建数据集  367
17.7   高级技术  368
17.7.1   DbUnit与模板设计模式  368
17.7.2   通过自定义注释提高重用  371
17.7.3   在数据集中使用表达式语言  373
17.8   数据库访问测试的最佳做法  376
17.8.1   每个开发者使用一个数据库  376
17.8.2   确保目标数据库被测试  377
17.8.3   为加载和存储数据创建互补测试  377
17.8.4   编写加载测试用例时,应涵盖所有基本场景  377
17.8.5   计划数据集的使用  378
17.8.6   测试清理  378
17.9   小结  379
第18章 测试基于JPA的应用程序  380
18.1   测试多层应用程序  381
18.1.1   示例应用程序  381
18.1.2   多层、多种测试策略  383
18.2   JPA测试的方方面面  386
18.3   准备基础设施  387
18.4   测试JPA实体映射  391
18.4.1   使用JPA ID生成器集成测试用例  392
18.5   测试基于JPA的DAO  398
18.6   测试外键名字  403
18.7   小结  406
第19章 JUnit的其他用法  407
19.1   介绍  408
19.1.1   工具概述  408
19.1.2   运行示例  409
19.2   透明地使用mock  409
19.2.1   Unitils的EasyMock支持  410
19.2.2   FEST-Mocks  412
19.2.3   Mycila  413
19.3   DbUnit集成  415
19.4   使断言更简单  418
19.4.1   JUnit-addons断言包  419
19.4.2   Unitlis的ReflectionAssert  420
19.4.3   FEST流畅断言模块  422
19.4.4   Mylica继承断言  423
19.5   使用反射绕过封装  424
19.5.1   内部替代物  424
19.5.2   JUnit-addons  426
19.5.3   FEST-Reflect  427
19.6   小结  428


附录A JUnit 3和JUnit 4之间的不同  430
A.1 全球的需求变化  430
A.1.1 JDK的要求  430
A.1.2 向后/向前兼容  431
A.2 API中的变化  431
A.2.1 包结构  431
A.2.2 构造函数  431
A.2.3 扩展TestCase  431
A.2.4 测试方法名称  432
A.3 注释与新增的静态导入  432
A.3.1 @Before与@After注释  432
A.3.2 @BeforeClass和@AfterClass注释  433
A.3.3 忽略测试的差异  433
A.3.4 静态导入  434
A.3.5 异常测试  434
A.3.6 超时测试  435
A.4 新的JUnit runners  435
A.4.1 测试运行器(Test runner)  435
A.4.2 测试集  436
A.4.3 参数化测试  436
A.5 新的断言和假设  437
A.5.1 Hamcrest断言  438
A.5.2 假设  438
A.5.3 新断言  439
A.5.4 断言错误  439
附录B 使用自定义的运行器和匹配器扩展JUnitAPI  440
B.1 介绍拦截器模式  441
B.2 实现自定义运行器  441
B.3 实现自定义匹配器  447
附录C 本书源代码  452
C.1 获取源代码  452
C.2 源代码概览  453
C.3 外部库  454
C.4 JAR版本  454
C.5 目录结构约定  455
附录D JUnit IDE集成  456
D.1 JUnit与Eclipse的集成  456
D.1.1 安装Eclipse  456
D.1.2 从源代码创建Eclipse项目  457
D.1.3 从Eclipse运行JUnit测试  457
D.1.4 从Eclipse运行Ant脚本  458
D.2 引入JUnitMAX Eclipse插件  460
D.2.1 集成在你的开发周期中  460
D.2.2 执行顺序  461
D.2.3 恢复到上一个稳定版本  461
D.3 JUnit与NetBeans集成  461
D.3.1 安装NetBeans  461
D.3.2 从源代码中创建NetBeans项目  462
D.3.3 从NetBeans运行JUnit测试  462
D.3.4 从NetBeans运行Ant脚本  464
附录E 安装软件  466
E.1 安装HtmlUnit  466
E.1.1 标准配置  466
E.1.2 Eclipse的配置  467
E.2 使用HtmlUnit配置Cactus  468
E.3 安装Selenium  469
E.4 安装RhinoUnit  469
E.5 安装JsUnit  469
0 0
原创粉丝点击