面试:用过c++测试用例/单元测试嘛?答:gtest

💡 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 自动验证。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值