首先安装配置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
<p>// math.cpp</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/6e7abc4abb9f" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">C++免费学习笔记(深入)</a>”;</p><h1>include "math.h"</h1><p>int add(int a, int b) {
return a + b;
}
3. 编写Google Test测试用例
创建一个测试文件,例如test_math.cpp:
#include <gtest/gtest.h>
#include "math.h"
<p>// 测试用例:测试add函数
TEST(MathTest, AddPositiveNumbers) {
EXPECT_EQ(add(2, 3), 5);
EXPECT_EQ(add(0, 0), 0);
}</p><p>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)
<h1>启用C++17</h1><p>set(CMAKE_CXX_STANDARD 17)</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/1837" title="Mokker AI"><img
src="https://img.php.cn/upload/ai_manual/000/969/633/68b6c9b25e117919.png" alt="Mokker AI" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/1837" title="Mokker AI">Mokker AI</a>
<p>AI产品图添加背景</p>
</div>
<a href="/ai/1837" title="Mokker AI" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><h1>添加源文件</h1><p>add_library(math_lib math.cpp)</p><h1>查找Google Test包</h1><p>find_package(GTest REQUIRED)</p><h1>添加测试可执行文件</h1><p>add_executable(test_math test_math.cpp)
target_link_libraries(test_math math_lib GTest::GTest GTest::Main)</p><h1>启用测试</h1><p>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提供了足够灵活的工具来覆盖大多数测试场景。不复杂但容易忽略的是断言选择和测试命名的清晰性。










