Google Test是C++中最常用、最成熟的单元测试框架,具备轻量跨平台、断言支持、参数化测试和死亡测试等特性;安装方式包括包管理器、vcpkg或免安装集成;测试用例通过TEST宏定义,由EXPECT_和ASSERT_断言验证逻辑,支持TEST_F组织初始化/清理、参数化测试及死亡测试。

在C++中做单元测试,最常用、最成熟的方案是 Google Test(简称gtest)。它轻量、跨平台、支持断言、参数化测试和死亡测试等特性,适合从新手到大型项目的各种场景。
一、快速安装与配置
多数现代开发环境已内置或可便捷集成gtest:
-
Linux/macOS:用包管理器安装,如 Ubuntu 执行
sudo apt-get install libgtest-dev,再编译源码生成库;推荐用 CMake +find_package(GTest REQUIRED)自动链接 -
Windows(MSVC):下载官方 release 或用 vcpkg:
vcpkg install googletest,然后在 CMakeLists.txt 中添加vcpkg integrate install -
免安装方式:直接把
googletest/googletest/include和googletest/googlemock/include加入头文件搜索路径,将src/gtest-all.cc编译进项目(适合小型工程或学习)
二、写第一个测试用例
一个典型测试由测试套件(TEST_F 或 TEST)+ 断言组成。不需要手动管理 main 函数——gtest 提供了默认入口。
示例:测试一个加法函数
立即学习“C++免费学习笔记(深入)”;
// add.h
int add(int a, int b);
// add.cpp
#include "add.h"
int add(int a, int b) { return a + b; }
// test_add.cpp
#include "add.h"
#include
TEST(AddTest, PositiveNumbers) {
EXPECT_EQ(add(2, 3), 5);
EXPECT_EQ(add(0, 0), 0);
}
TEST(AddTest, NegativeNumbers) {
EXPECT_EQ(add(-1, -1), -2);
}
编译运行后,gtest 会自动发现并执行所有 TEST 宏定义的用例,输出清晰的通过/失败信息。
三、常用断言与技巧
gtest 提供两类断言:
- EXPECT_*(如 EXPECT_EQ、EXPECT_TRUE):失败时记录错误,继续执行后续语句,适合检查多个条件
- ASSERT_*(如 ASSERT_NE、ASSERT_STREQ):失败时立即返回,跳过当前函数剩余逻辑,适合前置条件校验
- 字符串比较用
EXPECT_STREQ(str1, str2),浮点数用EXPECT_FLOAT_EQ(a, b)或带误差的EXPECT_NEAR(a, b, eps) - 用
SCOPED_TRACE("step 1")添加上下文,让失败信息更易定位
四、组织测试与进阶用法
随着代码变多,需合理组织测试结构:
- 用
TEST_F定义带公共初始化/清理的测试套件(继承自::testing::Test),重写SetUp()和TearDown() - 参数化测试:用
TEST_P+INSTANTIATE_TEST_SUITE_P对同一逻辑跑多组输入 - 死亡测试(验证程序是否按预期崩溃):用
ASSERT_DEATH(statement, regex),需启用 fork 支持(Linux/macOS 默认可用,Windows 需特殊配置) - CMake 中推荐为测试目标单独设置
add_executable(test_add test_add.cpp add.cpp),并链接gtest_main库避免重复实现 main











