目 录 第1 章 软件单元测试简介 ····································································.1 1.1 桩对象和测试驱动函数 ······························································.1 1.2 测试驱动开发 ·········································································.2 1.3 软件测试应该贯彻始终 ······························································.2 1.4 软件测试金字塔·······································································.3 1.5 单元测试在传统开发模式中的地位 ···············································.4 1.6 单元测试在敏捷开发模式中的地位 ···············································.5 1.7 精准测试 ···············································································.5 1.8 单元测试和白盒测试 ························��········································.6 1.9 单元测试的FIRST 原则和AIR 原则 ··············································.7 1.10 习题 ····················································································.7 第2 章 软件单元测试基础知识 ······························································.8 2.1 动态自动化单元测试 ·································································.8 2.1.1 被测程序 ·······································································.8 2.1.2 语句覆盖 ·······································································.8 2.1.3 分支覆盖 ······································································.11 2.1.4 条件覆盖 ·······································································13 2.1.5 条件/分支覆盖 ································································15 2.1.6 MC/DC 覆盖 ··································································15 2.1.7 路径覆盖 ·······································································17 2.1.8 几种覆盖率的强弱关系 ·····················································18 2.1.9 控制流覆盖 ····································································18 2.2 静态自动化单元测试:代码扫描 ··················································19 2.3 手工单元测试:代码调试 ···························································20 2.4 手工单元测试:代码评审 ···························································20 2.5 单元测试中的问题 ····································································20 2.5.1 功能层面的问题·····························································.21 2.5.2 性能层面的问题·····························································.22 2.5.3 **层面的问题·····························································.22 2.6 习题 ····················································································.23 第3 章 C 语言动态自动化单元测试框架 ·················································.24 3.1 在Windows 下安装C 语言运行环境 ············································.24 3.1.1 安装配置MinGW ···························································.24 3.1.2 安装配置MSYS2 ···························································.25 3.1.3 安装配置IDE ································································.25 3.2 安装编译CUnit ······································································.31 3.2.1 在Windows 下安装CUnit ·················································.31 3.2.2 在Linux 下安装CUnit ·····················································.31 3.2.3 创建被测文件和测试文件 ·················································.32 3.2.4 在Windows 下运行测试文件 ·············································.34 3.2.5 在Linux 下运行测试文件 ·················································.34 3.2.6 运行结果 ·····································································.35 3.3 查看测试报告 ········································································.35 3.4 CUnit 介绍 ············································································.36 3.4.1 CUnit 的四种运行模式 ·····················································.36 3.4.2 CUnit 头文件 ································································.38 3.4.3 CUnit 支持的断言 ··························································.39 3.4.4 CUnit 架构 ···································································.40 3.4.5 CUnit 的基本测试步骤 ·····················································.40 3.5 案例 ····················································································.41 3.5.1 指针操作 ·····································································.41 3.5.2 返回结构体 ··········································