Google Test是Google开发的c++单元测试框架,支持多种测试场景,语法简洁且功能强大,适合各类c++项目的单元测试需求。下面将从环境搭建开始,逐步介绍其使用方法。

环境搭建
首先需要下载Google Test源码,可通过官方仓库获取,也可以直接使用包管理器安装。以源码编译为例,步骤如下:
- 下载Google Test源码并解压
- 进入源码目录,创建build文件夹并进入
- 执行
cmake ..生成构建文件 - 执行
make编译,得到库文件 - 将生成的头文件和库文件放到系统对应的include和lib目录,或者项目指定的目录中
基础测试用例编写
编写测试用例需要包含Google Test的头文件,使用框架提供的宏定义来声明测试。下面是一个简单的示例,测试一个加法函数是否正确。
#include <gtest/gtest.h>
// 待测试的加法函数
int add(int a, int b) {
return a + b;
}
// 定义测试用例,第一个参数是测试用例名,第二个是测试名
TEST(AddTest, PositiveNumbers) {
EXPECT_EQ(add(1, 2), 3);
}
TEST(AddTest, NegativeNumbers) {
EXPECT_EQ(add(-1, -2), -3);
}
TEST(AddTest, MixedNumbers) {
EXPECT_EQ(add(1, -2), -1);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
上述代码中,TEST宏用于定义单个测试,第一个参数是测试用例的名称,第二个是测试点的名称。EXPECT_EQ是断言宏,用于判断两个值是否相等,如果不相等会输出错误信息但不会导致测试立即终止。
常用断言类型
Google Test提供了多种断言宏,分为EXPECT_*和ASSERT_*两类,前者失败不会终止当前测试,后者失败会直接终止当前测试。常用断言如下:
| 断言宏 | 作用 |
|---|---|
| EXPECT_EQ(val1, val2) | 判断val1等于val2 |
| EXPECT_NE(val1, val2) | 判断val1不等于val2 |
| EXPECT_LT(val1, val2) | 判断val1小于val2 |
| EXPECT_GT(val1, val2) | 判断val1大于val2 |
| EXPECT_TRUE(condition) | 判断条件为真 |
| EXPECT_FALSE(condition) | 判断条件为假 |
测试Fixture的使用
当多个测试需要共享相同的初始化和清理逻辑时,可以使用测试Fixture,通过继承testing::Test类实现。示例如下:
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public testing::Test {
protected:
// 每个测试执行前的初始化操作
void SetUp() override {
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
}
// 每个测试执行后的清理操作
void TearDown() override {
vec.clear();
}
std::vector<int> vec;
};
// TEST_F用于定义使用Fixture的测试,第一个参数是Fixture类名
TEST_F(VectorTest, SizeCheck) {
EXPECT_EQ(vec.size(), 3);
}
TEST_F(VectorTest, ElementCheck) {
EXPECT_EQ(vec[0], 1);
EXPECT_EQ(vec[1], 2);
EXPECT_EQ(vec[2], 3);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
使用TEST_F宏定义测试时,框架会在每个测试执行前后自动调用SetUp和TearDown方法,保证每个测试的环境独立。
编译与运行
假设上述代码保存为test.cpp,编译命令如下(假设Google Test库已经安装到系统目录):
g++ test.cpp -lgtest -lgtest_main -pthread -o test
编译完成后执行生成的可执行文件,即可看到所有测试的运行结果,包括通过和失败的测试数量以及具体错误信息。
Google_Testc++单元测试测试框架修改时间:2026-06-19 06:12:13