首先安装配置Google Test,接着编写被测函数和测试用例,然后通过CMake构建项目并运行测试。具体步骤包括:使用包管理器或源码安装gtest,定义待测函数如add,利用TEST宏创建测试套件与用例,使用EXPECT_EQ进行断言,在CMakeLists.txt中配置gmock_main或GTest::Main链接,最后编译执行测试输出结果。正确配置后可顺利运行单元测试并验证代码逻辑。

在C++中使用Google Test(通常称为gtest)编写单元测试,是一种非常有效的验证代码正确性的方法。Google Test是Google开发的一个开源C++测试框架,支持丰富的断言、参数化测试、死亡测试等功能。下面介绍如何配置并编写一个基本的Google Test单元测试。
1. 安装与配置Google Test
在开始前,需要先获取并安装Google Test库:
- 使用包管理器(如vcpkg、conan)或从GitHub克隆源码进行编译安装。
- 在Ubuntu上可通过命令:sudo apt-get install libgtest-dev cmake 安装源码,然后用cmake构建。
- 现代项目推荐使用CMake的FetchContent自动下载gtest,避免手动配置。
2. 编写被测试函数
假设有一个简单的加法函数需要测试:
// math.h #ifndef MATH_H #define MATH_H int add(int a, int b); #endif// math.cpp
立即学习“C++免费学习笔记(深入)”;
include "math.h"
int add(int a, int b) { return a + b; }
3. 编写Google Test测试用例
创建一个测试文件,例如test_math.cpp:
#include#include "math.h" // 测试用例:测试add函数 TEST(MathTest, AddPositiveNumbers) { EXPECT_EQ(add(2, 3), 5); EXPECT_EQ(add(0, 0), 0); }
TEST(MathTest, AddNegativeNumbers) { EXPECT_EQ(add(-1, -1), -2); EXPECT_EQ(add(-5, 3), -2); }
说明:
- TEST(测试套件名, 测试用例名) 是定义测试的基本宏。
- EXPECT_EQ 断言两个值相等,失败不会中断测试执行。
- 也可使用 ASSERT_EQ,失败会立即终止当前测试。
4. 使用CMake构建项目
创建CMakeLists.txt:
cmake_minimum_required(VERSION 3.14) project(MyTestProject)启用C++17
set(CMAKE_CXX_STANDARD 17)
添加源文件
add_library(math_lib math.cpp)
查找Google Test包
find_package(GTest REQUIRED)
添加测试可执行文件
add_executable(test_math test_math.cpp) target_link_libraries(test_math math_lib GTest::GTest GTest::Main)
启用测试
enable_testing() add_test(NAME run_tests COMMAND test_math)
或者使用FetchContent自动引入gtest:
include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip ) FetchContent_MakeAvailable(googletest) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
然后将链接目标改为gmock_main或GTest::Main。
5. 编译与运行测试
在项目目录下执行:
mkdir build cd build cmake .. make ./test_math
输出会显示哪些测试通过或失败,例如:
[==========] Running 2 tests from 1 test suite. [----------] Global test environment set-up. [----------] 2 tests from MathTest [ RUN ] MathTest.AddPositiveNumbers [ OK ] MathTest.AddPositiveNumbers (0 ms) [ RUN ] MathTest.AddNegativeNumbers [ OK ] MathTest.AddNegativeNumbers (0 ms) [----------] 2 tests from MathTest (1 ms total) [==========] 2 passed, 0 failed, 0 skipped.
基本上就这些。只要配置好环境,写测试就像写普通C++函数一样简单。关键是把逻辑拆解成小函数,并为每种情况写对应的测试用例。Google Test提供了足够灵活的工具来覆盖大多数测试场景。不复杂但容易忽略的是断言选择和测试命名的清晰性。











