第1章 软件测试与单元测试简介 1
1.1软件测试的目标 1
1.2软件测试由谁来做 2
1.3何时进行软件测试 5
1.4测试实践举例 6
1.5单元测试的适用范围 7
1.6测试驱动开发对iOS开发者的意义 10
第2章 测试驱动开发技巧 11
2.1测试先行 11
2.2“失败、成功、重构”三部曲 13
2.3设计易于测试的应用程序 15
2.4更多有关重构的知识 16
2.5不要实现目前用不到的功能 17
2.6在编码前、编码中及编码后进行测试 19
第3章 如何写单元测试 21
3.1需求 21
3.2使用已知的输入数据来运行代码 22
3.3查看运行结果是否符合预期 24
3.4验证结果 24
3.5使测试代码更具可读性 26
3.6将多个测试用例组织起来 27
3.7重构 30
3.8总结 32
第4章 测试工具 33
4.1 Xcode附带的OCUnit测试框架 33
4.2 OCUnit的替代方案 43
4.2.1 GTM 43
4.2.2 GHUnit 44
4.2.3 CATCH 45
4.2.4 OCMock 46
4.3持续集成工具 49
4.3.1 Hudson 50
4.3.2 CruiseControl 53
4.4总结 54
第5章 针对iOS应用程序的测试驱动开发 55
5.1产品目标 55
5.2用例 56
5.3执行方案 58
5.4开始制作程序 59
第6章 数据模型 61
6.1 Topic类 61
6.2 Question类 67
6.3 Person类 69
6.4 将Question类与其他类关联起来 70
6.5 Answer类 74
第7章 应用程序逻辑 79
7.1执行方案 79
7.2建立Question对象 80
7.3用JSON数据构建Question对象 93
第8章 网络相关代码 103
8.1 NSURLConnection类的设计 103
8.2 实现StackOverflowCommunicator类 105
8.3 总结 115
第9章 视图控制器 116
9.1类结构 116
9.2视图控制器类 117
9.3 TopicTableDataSource类与TopicTableDelegate类 121
9.4通过已有的视图控制器建立新的控制器对象 137
9.5提问列表的数据源 146
9.6接下来的任务 157
第10章 整合所有部件 158
10.1完成应用程序的工作流程 158
10.2显示用户头像 172
10.3收尾与清理 176
10.4发布应用 186
第11章 为测试驱动开发进行软件设计 187
11.1针对接口进行设计,而不要针对实现 187
11.2用命令代替查询 189
11.3简洁而专注的类与方法 190
11.4封装 191
11.5使用比重用更好 191
11.6测试并发代码 192
11.7别耍没有必要的小聪明 193
11.8优先选择宽而浅的继承体系 194
11.9综述 194
第12章 在既有项目中运用测试驱动开发 195
12.1第一个测试用例是最重要的 195
12.2通过重构使得代码更易于测试 196
12.3编写测试使得代码更易于重构 198
12.4真的需要写这么多测试用例吗 199
第13章 测试驱动开发展望 201
13.1使用一系列输入输出值构建测试用例 201
13.2行为驱动开发 202
13.3自动生成测试用例 203
13.4自动生成能够通过测试的代码 205
13.5综述 206