💡 Google Test 是干嘛的?
它是 C++ 单元测试框架,作用就是:
帮你自动验证函数的输出是否符合预期,帮你检测 bug,替你判断对错。
比如:你写了个函数 int add(int a, int b)
,你想知道它是否在各种输入下返回正确值,你可以用 gtest 写多个“测试用例”。
✅ 基本结构先看一眼(别急着懂):
#include <gtest/gtest.h>
int add(int a, int b) {
return a + b;
}
// 测试用例:名字是 AddTest,子测试名是 HandlesPositiveInput
TEST(AddTest, HandlesPositiveInput) {
EXPECT_EQ(add(1, 2), 3);
EXPECT_EQ(add(5, 7), 12);
}
TEST(AddTest, HandlesNegativeInput) {
EXPECT_EQ(add(-1, -2), -3);
EXPECT_EQ(add(-5, 5), 0);
}
🧠 带你逐句理解(简化讲解)
1. #include <gtest/gtest.h>
引入 gtest 框架的头文件,里面定义了测试宏、断言等。
2. int add(int a, int b)
就是你要测试的函数。你写算法、类、模块,最后都要测试一下它对不对。
3. TEST(AddTest, HandlesPositiveInput)
这是定义一个测试用例:
AddTest
是这个测试组的名字(可以随便起)HandlesPositiveInput
是这个测试的子名字(描述测试目的)
它表示:我要测试 add()
函数处理正数输入的情况。
4. EXPECT_EQ(add(1, 2), 3);
这是一个断言:期待 add(1, 2)
的结果是 3
。
如果不是,测试就会失败,控制台输出错误信息。
还有其它断言,比如:
断言宏 | 含义 |
---|---|
EXPECT_EQ(a, b) | 断言 a == b |
EXPECT_NE(a, b) | 断言 a != b |
EXPECT_TRUE(x) | 断言 x 为 true |
EXPECT_THROW(...) | 断言某函数抛出异常 |
ASSERT_EQ(a, b) | 和 EXPECT_EQ 类似,但失败时会终止这个测试 |
5. 怎么运行?
你写完测试后,用 g++ 编译并链接:
g++ test.cpp -lgtest -lgtest_main -pthread -o test
./test
它会自动运行你所有 TEST()
里的测试用例,告诉你是否通过。
✅ 简单记住 gtest 写法的模板:
#include <gtest/gtest.h>
int func(int x) { return x * 2; }
TEST(FuncTest, HandlesBasic) {
EXPECT_EQ(func(2), 4);
EXPECT_EQ(func(0), 0);
}
❓你现在可以问自己:
- 是不是每个
TEST(...)
就是一个“自动测试函数”? EXPECT_EQ()
是不是就像 assert/assertEquals?- 我写的函数能不能加上这样的测试?
✅ 面试时你可以这样说(加分项):
“我平时写完关键函数会加一些 gtest 测试,比如边界值、负数输入、异常处理等,一方面保证正确性,另一方面也方便 CI 自动验证。”