Skip to content

GoogleTest 01_总览

GoogleTest 是 C++ 项目中常用的单元测试框架。它的价值不只是提供 EXPECT_EQ 这类断言宏,更重要的是帮助工程建立可重复执行、可定位失败、可持续演进的测试体系。

学习 GoogleTest 时建议按三个层次推进:

  1. 会写测试:理解测试用例、断言、夹具、参数化测试。
  2. 会接入工程:理解 CMake、CTest、持续集成、覆盖率统计。
  3. 会分析机制:理解注册、运行、断言上报、事件监听器等源码设计。

GoogleTest 学习地图

学习路线

测试基本概念
  -> GoogleTest 简介与第一个测试
  -> 常用断言与测试夹具
  -> 参数化测试、死亡测试、匹配器
  -> CMake 与工程集成
  -> GoogleTest 源码分析
  -> lcov、genhtml、gcovr 覆盖率工具链
  -> 项目中的测试分层、命名、隔离与持续集成

章节目录

基础入门

API 说明

源码分析

工程集成

覆盖率工具

工程实践

GoogleTest 适合解决什么问题

场景 GoogleTest 能力 说明
函数级逻辑验证 TEST、断言宏 验证输入输出和边界条件
类成员行为验证 TEST_F、测试夹具 复用初始化与清理逻辑
多组输入验证 TEST_P、INSTANTIATE_TEST_SUITE_P 避免重复编写相同结构的测试
异常和错误路径 EXPECT_THROW、EXPECT_DEATH 验证异常、断言失败、进程退出
工程自动化 CTest、XML 输出、过滤器 适合接入 CI 和测试报告
覆盖率评估 gcov、lcov、genhtml、gcovr 观察测试是否触达关键代码

单元测试的基本思维

单元测试不是把所有代码跑一遍,而是把一个小的行为边界固定下来。一个好的测试通常包含三个部分:

  1. Arrange:准备输入、对象、依赖。
  2. Act:执行被测行为。
  3. Assert:检查结果、状态或交互。
#include <gtest/gtest.h>

int Add(int lhs, int rhs) {
    return lhs + rhs;
}

TEST(MathTest, AddReturnsSum) {
    const int result = Add(2, 3);

    EXPECT_EQ(result, 5);
}

GoogleTest 与其他测试工具的关系

GoogleTest 主要负责“运行测试和表达断言”。在真实工程里,它通常和以下工具配合:

工具 角色
CMake 构建测试目标、链接 GoogleTest
CTest 发现和执行测试,统一测试入口
gcov GCC 生成覆盖率原始数据
lcov 收集、过滤、汇总覆盖率数据
genhtml 把 lcov 数据生成 HTML 报告
gcovr 生成文本、HTML、XML、Cobertura 覆盖率报告
CI 系统 自动构建、测试、归档报告