嗨,大家好!我是一行。今天咱们来认识超棒的 GTest,它就像一个智能小助手,能帮我们轻松检查 C++代码有没有问题,让代码质量更靠谱。快来和我一起探索 GTest 的奇妙世界吧!
一、GTest 基础测试用例编写首先呢,我们得学会写简单的测试用例,这就像是给代码出小考题。
#include <gtest/gtest.h>
// 要测试的函数
int add(int a, int b) {
return a + b;
}
// 测试用例
TEST(AddTest, BasicAddition) {
int result = add(3, 5);
// 期望结果是 8
EXPECT_EQ(result, 8);
}
这里我们写了个测试 add
函数的用例,调用 add(3, 5)
后,用 EXPECT_EQ
检查结果是不是 8。小贴士:TEST
宏用来定义测试用例,第一个参数是测试套件名,第二个是测试用例名,名字要能清楚描述测试内容哦。
二、多个测试用例与断言我们可以写好多测试用例来全面检查函数。
#include <gtest/gtest.h>
int multiply(int a, int b) {
return a * b;
}
TEST(MultiplyTest, PositiveNumbers) {
int result = multiply(2, 4);
EXPECT_EQ(result, 8);
}
TEST(MultiplyTest, ZeroMultiplication) {
int result = multiply(0, 5);
EXPECT_EQ(result, 0);
}
这里有两个测试 multiply
函数的用例,分别测试正数相乘和 0 相乘的情况。EXPECT_EQ
就是断言,用来判断实际结果和期望结果是否相等,如果不相等,测试就失败了。
三、测试夹具(Test Fixture)的使用有时候测试的函数可能需要一些初始化操作,这时候就用到测试夹具啦,它就像给测试准备的小舞台。
#include <gtest/gtest.h>
class MyFixture : public ::testing::Test {
protected:
int num;
void SetUp() override {
num = 10;
}
};
TEST_F(MyFixture, UseFixtureValue) {
int result = num * 2;
EXPECT_EQ(result, 20);
}
在这个例子里,MyFixture
类继承自 ::testing::Test
,SetUp
函数里初始化 num
为 10,TEST_F
宏用来基于这个夹具写测试用例,这样测试用例里就能直接用 num
这个变量了。小贴士:记得在 SetUp
里初始化数据,TearDown
函数可以用来清理数据,不过这里没展示哦。
四、GTest 在实际项目中的应用场景假设我们在开发一个数学库项目,里面有很多数学运算函数。我们可以用 GTest 写大量测试用例来检查这些函数的正确性。比如有计算平方的函数 square
,我们可以写测试用例检查不同数的平方计算是否正确;有计算开方的函数 sqrt
,也能写测试用例检查边界值、正常值的计算结果。这样在修改代码或者添加新功能的时候,只要运行这些测试用例,就能很快知道有没有引入新的错误。
今天的 C++学习之旅就到这里啦!记得动手敲代码。祝大家学习愉快,C++学习节节高!