Google Test是C++中流行的单元测试框架,支持断言、测试夹具和参数化测试。1. 可通过包管理器或CMake的FetchContent集成;2. 编写测试用例使用TEST宏和EXPECT_EQ等断言;3. CMake构建时链接GTest::gtest_main并启用测试;4. 断言分为EXPECT(继续执行)和ASSERT(终止)两类;5. 测试夹具TEST_F用于共享初始化逻辑;6. 参数化测试TEST_P结合INSTANTIATE_TEST_SUITE_P可对多组数据运行相同逻辑。推荐将测试独立存放并接入CI流程,确保测试快速且隔离。

Google Test(简称 gtest)是 C++ 中最流行的单元测试框架之一,由 Google 开发并开源。它支持丰富的断言、测试夹具(Test Fixtures)、参数化测试等功能,适合用于各种规模的 C++ 项目中进行单元测试。
在使用 gtest 前,需要先将其集成到你的项目中。常见方式有:通过包管理器安装或从源码编译。
Ubuntu / Debian 系统:
sudo apt-get install libgtest-dev cmake cd /usr/src/gtest sudo cmake . sudo make sudo cp *.a /usr/lib
或者使用 vcpkg(推荐):
立即学习“C++免费学习笔记(深入)”;
vcpkg install googletest
也可以在项目中直接使用 CMake 添加:
include(FetchContent) FetchContent_Declare( googletest URL https://www.php.cn/link/5d810d095c3f16cce86a8b99060ff44c ) FetchContent_MakeAvailable(googletest)
这样可以在项目中自动下载并链接 gtest,无需系统级安装。
假设你有一个简单的加法函数需要测试:
// math.h #ifndef MATH_H #define MATH_H int add(int a, int b); #endif
// math.cpp
#include "math.h"
int add(int a, int b) {
return a + b;
}
现在编写测试文件 test_math.cpp:
#include <gtest/gtest.h>
#include "math.h"
<p>// 测试用例:测试 add 函数
TEST(MathTest, AddFunction) {
EXPECT_EQ(add(2, 3), 5);
EXPECT_EQ(add(-1, 1), 0);
EXPECT_EQ(add(0, 0), 0);
}</p><p>// 主函数(如果 gtest 已经链接了 main,这里可以不写)
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
创建 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.14)
project(MyTestProject)
<p>set(CMAKE_CXX_STANDARD 17)</p><h1>添加源文件和测试文件</h1><p>add_library(math_lib math.cpp)</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/2095">
<img src="https://img.php.cn/upload/ai_manual/001/246/273/68b6cab553c77389.png" alt="青柚面试">
</a>
<div class="aritcle_card_info">
<a href="/ai/2095">青柚面试</a>
<p>简单好用的日语面试辅助工具</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="青柚面试">
<span>57</span>
</div>
</div>
<a href="/ai/2095" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="青柚面试">
</a>
</div>
<h1>使用 FetchContent 获取 gtest</h1><p>include(FetchContent)
FetchContent_Declare(
googletest
URL <a href="https://www.php.cn/link/5d810d095c3f16cce86a8b99060ff44c">https://www.php.cn/link/5d810d095c3f16cce86a8b99060ff44c</a>
)
FetchContent_MakeAvailable(googletest)</p><h1>添加测试可执行文件</h1><p>enable_testing()</p><p>add_executable(test_math test_math.cpp)
target_link_libraries(test_math math_lib GTest::gtest_main)</p><h1>注册测试</h1><p>add_test(NAME MathTest ADD_COMMANDS test_math)
构建流程:
mkdir build cd build cmake .. make ./test_math
运行后你会看到类似输出:
[==========] Running 1 test from 1 test suite. [----------] Global test environment set-up. [----------] 1 test from MathTest [ RUN ] MathTest.AddFunction [ OK ] MathTest.AddFunction (0 ms) [----------] 1 test from MathTest (0 ms total) [==========] 1 test from 1 test suite ran. (0 ms total) [ PASSED ] 1 test.
gtest 提供两类断言:ASSERT 和 EXPECT。
常见断言示例:
EXPECT_EQ(a, b); // 相等 EXPECT_NE(a, b); // 不相等 EXPECT_LT(a, b); // 小于 EXPECT_LE(a, b); // 小于等于 EXPECT_GT(a, b); // 大于 EXPECT_GE(a, b); // 大于等于 <p>EXPECT_TRUE(condition); // 条件为真 EXPECT_FALSE(condition); // 条件为假</p><p>EXPECT_STREQ(s1, s2); // 字符串相等(C风格) EXPECT_STRNE(s1, s2); // 字符串不等 EXPECT_THROW(stmt, ExceptionType); // 是否抛出异常 EXPECT_NO_THROW(stmt); // 是否不抛出异常
当你需要多个测试共享相同数据或初始化逻辑时,可以使用 TEST_F。
class MyStringTest : public ::testing::Test {
protected:
void SetUp() override {
str1 = "Hello";
str2 = "World";
}
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">void TearDown() override {
// 清理资源(如有)
}
std::string str1;
std::string str2;};
TEST_F(MyStringTest, Concatenate) { std::string result = str1 + " " + str2; EXPECT_EQ(result, "Hello World"); }
每个以 TEST_F 定义的测试都会创建一个新的 MyStringTest 实例,确保隔离性。
如果你希望用不同输入运行同一测试逻辑,可以使用参数化测试。
class SquareTest : public ::testing::TestWithParam<int> {};
<p>TEST_P(SquareTest, PositiveNumbers) {
int input = GetParam();
EXPECT_EQ(input * input, Square(input));
}</p><p>// 指定测试参数
INSTANTIATE_TEST_SUITE_P(Default, SquareTest, ::testing::Values(1, 2, 3, 4));
上述代码会为每个值生成一个独立测试用例。
基本上就这些。掌握以上内容后,你已经可以熟练在 C++ 项目中使用 Google Test 进行单元测试了。实际开发中建议将测试代码放在单独目录,并配合 CI 工具自动运行。不复杂但容易忽略的是保持测试独立性和快速执行。
以上就是C++怎么使用Google Test框架_C++ gtest单元测试框架使用教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号