C++程序设计实践与技巧测试驱动开发
2020-04-15 15:20:30 0 举报
AI智能生成
C++程序设计实践与技巧测试驱动开发
作者其他创作
大纲/内容
4 测试结构
4.1 开场白
4.2 组织方式
4.2.1 文件组织
4.2.2 fixture
4.2.3 Setup与Teardown
4.2.4 Arrange-Act-Assert/Given-When-Then
4.3 快速测试、慢速测试、过滤器和测试集
运行测试的一个子集
4.4 断言
4.4.1 经典的断言形式
4.4.2 Hamcrest断言
4.4.3 选择正确的断言
4.4.4 浮点数比较
4.4.5 基于异常的测试
4.5 探查私有成员
4.5.1 私有数据
4.5.2 私有行为
4.6 测试和测试驱动:参数化的测试及其他方法
4.6.1 参数化测试
4.6.2 测试中的注释
4.7 结束语
5 测试替身
5.1 开场白
5.2 依赖问题
5.3 测试替身
5.4 手动打造的测试替身
5.5 在使用测试替身时提升测试的抽象程度
5.6 使用模拟对象工具
5.6.1 定义一个派生类
5.6.2 设立期望
5.6.3 松模拟和严模拟
5.6.4 模拟对象中的顺序
5.6.5 巧妙的模拟工具特性
5.6.6 排除模拟失败
5.6.7 一个还是两个测试
5.7 让测试替身各就各位
5.7.1 覆写工厂方法和覆写Getter
5.7.2 使用工厂
5.7.3 通过模板参数
5.7.4 注入工具
5.8 设计会变化
5.8.1 内聚与耦合
5.8.2 转嫁私有依赖
5.9 使用测试替身的策略
5.9.1 探索设计
5.9.2 mock流派
5.9.3 明智地使用测试替身
5.10 其他关于测试替身的主题
5.10.1 怎么称呼它们
5.10.2 测试替身该放在哪
5.10.3 虚函数表和性能
5.10.4 模拟具体的类
5.11 结束语
6 增量设计
6.1 开场白
6.2 简单设计
6.2.1 重复代码的代价
6.2.2 投资管理器
6.2.3 投资管理器中的简单重复
6.2.4 我们真的能坚持增量方法吗
6.2.5 更多的重复
6.2.6 小方法的好处
6.2.7 完成功能
6.2.8 增量设计让事情变得简单
6.3 预先设计在哪
6.3.1 哪里才会讨论真正的设计呢
6.3.2 简单设计原则和经典设计理念会在哪起冲突
6.4 阻碍重构的因素
6.5 结束语
7 高质量测试
7.1 开场白
7.2 测试先行
7.2.1 快速
7.2.2 独立
7.2.3 可重复
7.2.4 自我验证
7.2.5 及时
7.3 一个测试一个断言
7.4 测试抽象
7.4.1 臃肿的初始化
7.4.2 不相关的细节
7.4.3 缺失的抽象
7.4.4 多重断言
7.4.5 不相关的数据
7.4.6 不必要的测试代码
7.5 结束语
8 遗留代码的挑战
8.1 开场白
8.2 遗留代码
8.3 法则
8.4 遗留应用程序
8.5 保持测试驱动开发的心态
8.6 支持测试的安全重构
8.7 添加测试刻画已有行为
8.8 被遗留代码转移注意力
8.9 为rlog创建测试替身
8.10 测试驱动开发改动
8.11 新的场景
8.12 寻求更快测试的简要探索
8.13 立竿见影的提取
8.14 用成员变量查看状态
8.15 用mock查看状态
8.16 其他注入技巧
8.17 用Mikado方法大规模改动代码
8.18 Mikado方法概览
8.19 用Mikado移动一个方法
8.20 有关Mikado方法的更多思考
8.21 这样做值得吗
8.22 结束语
9 测试驱动开发与多线程
9.1 开场白
9.2 测试驱动开发多线程应用的核心概念
9.3 示例程序GeoServer
9.4 性能要求
9.5 设计异步方案
9.6 依然简单的测试驱动
9.7 为多线程做好准备
9.8 暴露并发性问题
9.9 在测试中创建客户端线程
9.10 在ThreadPool中创建多个线程
9.11 回到GeoServer
9.12 结束语
10 测试驱动开发的其他概念和讨论
10.1 开场白
10.2 测试驱动开发与性能
10.2.1 性能优化测试的策略
10.2.2 相关单元级性能测试
10.2.3 尝试优化GeoServer代码
10.2.4 TestTimer类
10.2.5 性能和小函数
10.2.6 推荐
10.3 单元测试、集成测试和验收测试
10.3.1 测试驱动开发如何与验收测试建立联系
10.3.2 程序员定义的集成测试
10.3.3 测试驱动开发和验收测试驱动开发的重合部分
10.4 变换优先级假设
10.4.1 了解变换
10.4.2 三角法
10.4.3 浏览测试列表
10.5 编写断言
10.5.1 断言—行为—排列
10.5.2 示例程序优先,或至少第二
10.6 结束语
11 发展和维持测试驱动开发
11.1 开场白
11.2 向非技术人员解释测试驱动开发
11.2.1 测试驱动什么
11.2.2 关于TDD的研究
11.3 不良测试的死亡漩涡(亦称为SCUMmy周期)
11.4 结对编程
11.4.1 结对原则
11.4.2 结对编程与测试驱动开发
11.4.3 角色切换
11.5 Kata和Dojo
11.5.1 在测试驱动开发中应用Kata
11.5.2 Dojo
11.6 有效地使用代码覆盖率统计
11.7 持续集成
11.8 为团队制定测试驱动开发标准
11.9 保持与社区同步
11.9.1 阅读测试
11.9.2 博客与论坛
11.10 结束语
附录 A 比较单元测试工具
A1.1 开场白
A1.2 测试驱动开发单元测试工具的特性
A1.3 Google Mock的说明
A1.4 CppUTest的说明
A1.5 其他单元测试框架
A1.6 结束语
附录 B 代码Kata:罗马数字转换器
B.1 开场白
B.2 出发吧
B.2.1 1,2,3……
B.2.2 数字10,先生!
B.2.3 欲擒故纵
B.2.4 收尾工作
B.3 熟能生巧
B.4 结束语
附录 C 参考文献
看完了
版权声明
本书赞誉
它适合我和我的系统吗
本书目标读者
阅读前提
怎样使用本书
关于“我们”
关于我
本书中的C++代码风格
1 环境设置
1.1 开场白
1.2 示例程序
1.3 C++编译器
1.3.1 Ubuntu
1.3.2 OS X
1.3.3 Windows
1.4 CMake
1.5 Google Mock
1.5.1 安装Google Mock
1.5.2 创建main函数运行Google Mock测试
1.6 CppUTest
1.6.1 安装CppUTest
1.6.2 创建main函数以运行CppUTest测试
1.7 libcurl
1.8 JsonCpp
1.9 rlog
1.10 Boost
1.11 构建示例并运行测试
1.12 结束语
2 测试驱动开发:第一个示例
2.1 开场白
2.2 Soundex类
2.3 开始吧
2.4 去掉不干净的代码
2.5 增量性
2.6 fixture与设置
2.7 思索与测试驱动开发
2.8 测试驱动与测试
2.9 如果出现别的情况呢
2.10 一次只做一件事
2.11 限制长度
2.12 丢掉元音
2.13 让测试自我澄清
2.14 跳出条条框框来测试
2.15 言归正传
2.16 重构至单一责任的函数
2.17 收尾工作
2.18 漏了什么测试吗
2.19 解决方案
2.20 Soundex类
2.21 结束语
3 测试驱动开发基础
3.1 开场白
3.2 单元测试和测试驱动开发基础知识
3.2.1 单元测试的组织和执行
3.2.2 测试驱动单元
3.3 测试驱动开发周期:红-绿-重构
思考和测试驱动开发
3.4 测试驱动开发的三条准则
3.5 表里不一
3.5.1 运行了错误的测试
3.5.2 测试了错误的代码
3.5.3 不当的测试规范
3.5.4 对系统的无效假设
3.5.5 不佳的测试顺序
3.5.6 相关联的产品代码
3.5.7 过度编码
3.5.8 确定性测试
3.5.9 停下来想一下
3.6 成功运用测试驱动开发的思维
3.6.1 增量性
3.6.2 测试行为而非方法
3.6.3 使用测试来描述行为
3.6.4 保持简单
3.6.5 恪守测试驱动开发周期
3.7 成功运用测试驱动开发的方法
3.7.1 下一个测试是什么
3.7.2 十分钟限制
3.7.3 代码缺陷
3.7.4 禁用测试
3.8 结束语
0 条评论
下一页