C++ 测试驱动开发与单元测试实战

📚 共计 30 章节
01
TDD初探
什么是测试驱动开发?TDD的红-绿-重构循环。为什么TDD能提升代码质量?
红绿重构核心思想
02
C++单元测试框架选型
Google Test vs Catch2 vs Boost.Test,如何选择最适合项目的框架?
框架对比选型
03
搭建第一个测试环境
使用CMake + Google Test搭建C++单元测试项目,编写第一个测试用例。
CMake上手
04
断言的艺术
EXPECT_TRUE、ASSERT_EQ、EXPECT_THROW等断言宏的深入理解与使用场景。
断言EXPECT
05
测试夹具(Test Fixtures)
SetUp/TearDown的使用,共享测试数据,避免代码重复。
夹具SetUp
06
参数化测试
使用TEST_P和INSTANTIATE_TEST_SUITE_P实现数据驱动测试,覆盖边界条件。
数据驱动边界
07
模拟对象(Mock)
使用Google Mock创建桩对象,验证函数调用次数、参数和顺序。
MockGoogle Mock
08
测试替身(Test Doubles)
Stub、Mock、Fake、Dummy、Spy的区别与实战应用。
替身Stub
09
TDD实战-计算器
从零开始用TDD开发一个支持加减乘除的计算器类。
实战计算器
10
TDD实战-字符串工具库
用TDD开发字符串分割、反转、大小写转换等工具函数。
字符串工具
11
TDD实战-栈数据结构
用TDD实现一个模板栈类,包含push、pop、top、isEmpty等操作。
模板
12
代码覆盖率
使用gcov和lcov测量测试覆盖率,理解行覆盖率、分支覆盖率。
gcov覆盖率
13
持续集成中的单元测试
配置GitHub Actions或Jenkins,每次提交自动运行测试。
CIGitHub Actions
14
测试驱动重构
如何安全地重构遗留代码?TDD如何保证重构不引入bug?
重构安全
15
测试与设计模式
TDD如何促进依赖注入、接口隔离等良好设计?
设计模式依赖注入
16
异常安全测试
如何测试函数在抛出异常时的资源管理和状态一致性?
异常安全
17
多线程测试
使用Google Test测试多线程代码,检测竞态条件和死锁。
多线程竞态
18
性能测试
使用Google Benchmark编写微基准测试,与单元测试结合。
Benchmark性能
19
测试组织与命名规范
测试文件结构、测试套件命名、测试用例命名的最佳实践。
命名规范
20
TDD与遗留代码
为遗留代码编写特性测试(Characterization Test),逐步引入TDD。
遗留代码特性测试
21
测试驱动文档
如何让测试用例成为可执行的文档?BDD风格测试简介。
BDD文档
22
内存泄漏检测
在单元测试中集成Valgrind或AddressSanitizer检测内存问题。
ValgrindASan
23
测试与构建系统
大型项目中如何组织测试?测试与主代码的依赖管理。
构建依赖
24
TDD与代码审查
测试如何辅助代码审查?审查测试用例的要点。
审查代码质量
25
测试驱动API设计
先写测试再设计API,如何写出易用且健壮的接口?
API接口设计
26
模糊测试(Fuzzing)入门
结合libFuzzer与单元测试,发现隐藏的边界bug。
Fuzzing边界
27
测试驱动嵌入式开发
在资源受限环境下如何应用TDD?使用模拟硬件层。
嵌入式模拟
28
TDD与敏捷开发
TDD在Scrum和极限编程中的角色,与结对编程的结合。
敏捷Scrum
29
常见TDD陷阱与反模式
测试太脆弱、测试与实现耦合、过度Mock等问题的解决。
反模式陷阱
30
综合实战:JSON解析器
用TDD开发一个JSON解析器,覆盖解析、序列化、错误处理等完整功能。
JSON综合实战