目录
第1章为何要关心测试驱动开发1
1.1为何要使用TDD1
1.1.1理解TDD3
1.1.2红灯绿灯重构3
1.1.3速度是关键4
1.1.4TDD并非测试方法4
1.2测试5
1.2.1黑盒测试5
1.2.2白盒测试5
1.2.3质量检查和质量保证的差别6
1.2.4更好的测试6
1.3模拟7
1.4可执行的文档7
1.5无需调试9
1.6小结9
第2章工具、框架和环境10
2.1Git10
2.2虚拟机11
2.2.1Vagrant11
2.2.2Docker13
2.3构建工具14
2.4集成开发环境15
2.5单元测试框架16
2.5.1JUnit17
2.5.2TestNG19
2.6Hamcrest和AssertJ21
2.6.1Hamcrest21
2.6.2AssertJ22
2.7代码覆盖率工具23
2.8模拟框架24
2.8.1Mockito26
2.8.2EasyMock28
2.8.3PowerMock29
2.9用户界面测试29
2.9.1Web测试框架30
2.9.2Selenium30
2.9.3Selenide31
2.10行为驱动开发33
2.10.1JBehave33
2.10.2Cucumber35
2.11小结37
第3章红灯绿灯重构——从失败到
成功再到完美38
3.1使用Gradle和JUnit搭建环境39
3.2“红灯绿灯重构”过程41
3.2.1编写一个测试41
3.2.2运行所有测试并确认最后一个未通过41
3.2.3编写实现代码42
3.2.4运行所有测试42
3.2.5重构42
3.2.6重复43
3.3“井字游戏”的需求43
3.4开发“井字游戏”43
3.4.1需求144
3.4.2需求249
3.4.3需求352
3.4.4需求457
3.5代码覆盖率58
3.6更多练习59
3.7小结60
第4章单元测试——专注于当下而非
过往61
4.1单元测试61
4.1.1何为单元测试62
4.1.2为何要进行单元测试62
4.1.3代码重构62
4.1.4为何不只使用单元测试63
4.2TDD中的单元测试64
4.3TestNG64
4.3.1注解@Test64
4.3.2注解@BeforeSuite、@Be-foreTest、@BeforeGroups、@AfterGroups、@AfterTest和@AfterSuite65
4.3.3注解@BeforeClass和@AfterClass65
4.3.4注解@BeforeMethod和@AfterMethod66
4.3.5注解参数@Test(enable=false)66
4.3.6注解参数@Test(expected-Exceptions=SomeClass.class)66
4.3.7TestNG和JUnit差别小结66
4.4“遥控军舰”的需求66
4.5开发“遥控军舰”67
4.5.1创建项目67
4.5.2辅助类69
4.5.3需求169
4.5.4需求272
4.5.5需求374
4.5.6需求475
4.5.7需求577
4.5.8需求680
4.6小结81
第5章设计——难以测试说明设计
不佳82
5.1为何要关心设计82
5.2Connect484
5.3完成Connect4实现后再测试85
5.3.1需求185
5.3.2需求286
5.3.3需求387
5.3.4需求488
5.3.5需求589
5.3.6需求689
5.3.7需求790
5.3.8需求891
5.4使用TDD实现Connect492
5.4.1Hamcrest92
5.4.2需求193
5.4.3需求293
5.4.4需求396
5.4.5需求497
5.4.6需求599
5.4.7需求699
5.4.8需求7100
5.4.9需求8101
5.5小结103
第6章模拟——消除外部依赖104
6.1模拟104
6.1.1为何使用模拟对象105
6.1.2术语106
6.1.3模拟对象106
6.2Mockito107
6.3“井字游戏”第二版的需求107
6.4开发“井字游戏”第二版107
6.4.1需求1108
6.4.2需求2118
6.5集成测试124
6.5.1分离测试124
6.5.2集成测试125
6.6小结127
第7章BDD——与整个团队协作128
7.1不同规范128
7.1.1文档129
7.1.2供程序员使用的文档129
7.1.3供非程序员使用的文档130
7.2行为驱动开发130
7.2.1叙述131
7.2.2场景132
7.3书店应用程序的BDD故事133
7.4JBehave136
7.4.1JBehave运行器136
7.4.2待定步骤137
7.4.3Selenium和Selenide138
7.4.4JBehave步骤139
7.4.5最后的验证144
7.5小结146
第8章重构遗留代码——使其重焕
青春147
8.1遗留代码147
8.2编码套路156
8.2.1遗留代码处理套路157
8.2.2描述157
8.2.3技术说明157
8.2.4添加新功能157
8.2.5黑盒测试还是尖峰冲击测试157
8.2.6初步调查158
8.2.7应用遗留代码修改算法161
8.2.8提取并重写调用166
8.2.9消除状态的“基本类型偏执”坏味170
8.3小结173
第9章功能开关——将未完成的功能
部署到生成环境175
9.1持续集成、持续交付和持续部署175
9.2功能开关177
9.3功能开关示例178
9.3.1实现fibonacci服务181
9.3.2使用模版引擎184
9.4小结187
第10章综述188
10.1TDD概要188
10.2最佳实践189
10.2.1命名约定189
10.2.2流程191
10.2.3开发实践192
10.2.4工具195
10.3这只是开始196
10.4这并非终点196
以下为对购买帮助不大的评价