用GTest写C++单元测试核心三步:安装GTest(推荐源码编译)、编写测试用例(用TEST宏和EXPECT_/ASSERT_断言)、CMake编译运行(链接GTest::gtest_main)。
用 GTest 写 C++ 单元测试,核心就三步:安装 GTest、写测试用例、编译运行。不需要复杂配置,Linux/macOS 下用 CMake 最稳,Windows 用 Visual Studio 也能快速上手。
GTest 官方不提供系统包管理器的稳定二进制,直接拉源码编译最可控:
git clone https://github.com/google/googletest.git
cd googletest && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --target install(默认装到 /usr/local,需 sudo;也可加 -DCMAKE_INSTALL_PREFIX=/your/path 指定路径)完成后,头文件在 include/gtest,库文件是 lib/libgtest.a(静态)或 lib/libgtest.so(动态)。
假设你有个待测函数 int Add(int a, int b) { return a + b; },测试代码如下:
#includeint Add(int a, int b) { return a + b; }
// 测试用例必须放在 TEST 宏里,格式:TEST(测试套名, 测试名) TEST(AddTest, Posi
tiveNumbers) { EXPECT_EQ(Add(2, 3), 5); // 推荐:失败继续执行 EXPECT_EQ(Add(0, 0), 0); }
TEST(AddTest, NegativeNumbers) { ASSERT_EQ(Add(-1, -1), -2); // 断言失败则终止当前测试函数 }
注意:EXPECT_* 是检查点,多个可共存;ASSERT_* 用于前置条件,失败立刻跳出。
在项目根目录写 CMakeLists.txt:
cmake_minimum_required(VERSION 3.10) project(MyTest)查找 GTest(确保已安装到系统路径,或用 find_package(GTest REQUIRED CONFIG))
find_package(GTest REQUIRED) find_package(Threads REQUIRED)
add_executable(my_test test.cpp) target_link_libraries(my_test GTest::gtest GTest::gtest_main Threads::Threads)
gtest_main 提供了默认 main(),不用自己写
mkdir build && cd build && cmake .. && make && ./my_test
[ RUN ] AddTest.PositiveNumbers
[ OK ] AddTest.PositiveNumbers (0 ms)
[ RUN ] AddTest.NegativeNumbers
[ OK ] AddTest.NegativeNumbers (0 ms)
--gtest_filter=AddTest.* 可只跑某个测试套;--gtest_help 查看全部选项TEST_F 配合 class XXXTest : public ::testing::Test,在 SetUp()/TearDown() 里做初始化/清理INSTANTIATE_TEST_SUITE_P + TEST_P
EXPECT_EQ(a, b) 出错会显示 Expected: a
Which is: 10
To be equal to: b
Which is: 12
不复杂但容易忽略:确保链接 GTest::gtest_main,否则要自己实现 main();编译时加上 -std=c++17(GTest 1.12+ 要求 C++14 起)。