C语言单元测试与自动化测试实战

📚 共计 30 章节
01
单元测试基础
什么是单元测试、为什么需要单元测试、单元测试与集成测试的区别
概念入门
02
C语言测试框架概览
CUnit、Unity、Check、CMocka等框架介绍与选型对比
框架对比
03
搭建测试环境
在Linux/Windows上安装CUnit、配置CMake项目集成测试框架
环境CMake
04
第一个单元测试
使用CUnit编写简单的加法函数测试、编译与运行
实战CUnit
05
断言的艺术
CUnit中的CU_ASSERT、CU_ASSERT_EQUAL、CU_ASSERT_STRING_EQUAL等断言详解
断言核心
06
测试套件与注册
SUITE与TEST的注册机制、测试套件的初始化与清理
套件组织
07
测试夹具(Test Fixture)
setUp与tearDown函数的使用、共享资源的初始化与释放
夹具资源
08
参数化测试
如何用循环或宏实现多组输入数据的测试、避免重复代码
参数化
09
模拟(Mock)对象基础
什么是Mock、为什么需要Mock、手动实现简单的Mock
Mock基础
10
使用CMocka进行Mock测试
expect_*与will_return_*系列函数实战
CMocka模拟
11
测试驱动开发(TDD)入门
红-绿-重构循环、在C项目中实践TDD
TDD方法论
12
代码覆盖率入门
gcov与lcov工具介绍、生成覆盖率报告
覆盖率gcov
13
分支覆盖率与路径覆盖率
理解不同覆盖率指标、如何提高覆盖率
分支路径
14
静态测试与动态测试
PC-Lint/Cppcheck静态分析、与单元测试的互补
静态动态
15
测试边界条件
空指针、数组越界、整数溢出等典型边界测试案例
边界安全
16
测试错误处理
如何测试函数返回错误码、异常分支的覆盖
错误异常
17
测试回调函数
对函数指针参数进行测试、验证回调被正确调用
回调函数指针
18
测试多线程代码
使用CUnit测试线程安全函数、处理竞态条件
多线程并发
19
测试文件I/O
模拟文件系统、使用临时文件进行读写测试
文件I/O
20
测试网络通信
Mock socket API、测试TCP/UDP协议处理逻辑
网络Mock
21
测试嵌入式代码
交叉编译测试框架、在模拟器上运行单元测试
嵌入式交叉编译
22
持续集成(CI)中的单元测试
Jenkins/GitHub Actions配置自动测试流水线
CI自动化
23
测试报告生成
JUnit XML格式输出、集成到Jenkins展示测试趋势
报告JUnit
24
测试代码风格与规范
命名约定、注释要求、测试代码的可维护性
风格规范
25
重构与测试
如何安全地重构遗留C代码、测试作为安全网
重构遗留代码
26
测试大型项目
模块化测试、测试依赖管理、增量测试策略
大型项目模块化
27
性能测试与基准测试
使用Google Benchmark对C函数进行性能测试
性能Benchmark
28
模糊测试(Fuzzing)入门
libFuzzer与AFL在C语言中的应用
Fuzzing安全
29
测试安全关键代码
MISRA-C规范与单元测试的结合、DO-178C标准简介
安全MISRA
30
综合实战
从零开始为一个开源C项目(如cJSON)编写完整的单元测试套件
实战cJSON