当前位置: 首页> 财经> 产业 > Gtest(Google Test)使用

Gtest(Google Test)使用

时间:2025/7/29 15:19:43来源:https://blog.csdn.net/qq_31868891/article/details/142030041 浏览次数:1次

下面Gtest是在arm-linux下运行的

https://download.csdn.net/download/qq_31868891/89729426

一、下载编译

1.下载gtest代码

https://github.com/google/googletest

2.配置编译

vscode安装CMake Tools

将上面下载的gtest代码文件夹拖到vscode里,然后选择对应的CMakeLists.txt

如下根据自己需求修改编译的gcc版本

选择好gcc版本点击编译

编译后会在build/lib下生成静态库文件

二、使用

建一个Gtest文件夹

把编译生成的lib文件夹复制Gtest文件夹

把googletest-main./googletest-main/googletest/include/下gtest文件夹复制到Gtest文件夹

把googletest-main./googletest-main/googlemock/include/下gmock文件夹复制到Gtest文件夹

编译时要带 -LGtest/lib -lgtest -lgtest_main -lgmock -lgmock_main

gtest 使用
int Targetfun::printfint(int n)
{printf("%d\n", n);return n;
}//成功
TEST_F(UnitTest, printfint1)
{    int ret = printfint(1);   EXPECT_EQ(ret, 1);
}
//失败
TEST_F(UnitTest, printfint2)
{    int ret = printfint(2);   EXPECT_EQ(ret, 1);
}

gmock 模拟返回值使用

如下假设printint函数依赖别的硬件无法运行,可以用mock让函数直接返回275,即printffun返回false。mock替换要先把 printfint定义为虚函数

virtual int printfint(int n);bool Targetfun::printffun(int n)
{printf("Target fun\n");int a = printfint(n);if (a > 256){printf("%d>256\n", a);return false;}printf("%d<=256\n", a);return true;
}//测试代码
class UnitTest : public ::testing::Test, public Targetfun
{
public:void SetUp();void TearDown();public:MOCK_METHOD(int, printfint, (int n));//用于gmock模拟函数
};//如下通过mock让代码返回275
TEST_F(UnitTest, printffun2)
{int n = 2;EXPECT_CALL(*this, printfint(n)).WillOnce(::testing::Return(257));bool ret = printffun(n);EXPECT_EQ(ret, false);
}

gmock 替换虚函数注意

如下因为虚函数被mock替换执行会失败,可以参考printfint4在函数前加类

class UnitTest : public ::testing::Test, public Targetfun
{
public:void SetUp();void TearDown();public:MOCK_METHOD(int, printfint, (int n));
};//失败
TEST_F(UnitTest, printfint3)
{int ret = printfint(3);EXPECT_EQ(ret, 3);
}
//成功
TEST_F(UnitTest, printfint4)
{int ret = Targetfun::printfint(4);EXPECT_EQ(ret, 4);
}

函数运行条件

如下测试CalcSum函数要提前初始化m_pCalcSum结构体

//如下m_pCalcSum是指针要提前初始化,不能为null
int Targetfun::CalcSum(int a, int b, int *sum)
{m_pCalcSum->sum = a + b;*sum = m_pCalcSum->sum;printf("%d\n", m_pCalcSum->sum);return m_pCalcSum->sum;
}//如下5是放函数里赋值,6是放SetUp里
//可以粗滤认为SetUp与TearDown()是UnitTest类的构造与析构函数
void UnitTest::SetUp()
{// 在每个测试案例开始前设置测试环境    m_pCalcSum = &m_CalcSum;
}void UnitTest::TearDown()
{// 在每个测试案例结束后清理测试环境
}TEST_F(UnitTest, printfint5)
{int sum;S_CalcSum mCalcSum;m_pCalcSum = &mCalcSum;int ret = Targetfun::CalcSum(4, 5, &sum);printf("mCalcSum:%d m_CalcSum:%d\n", mCalcSum.sum,m_CalcSum.sum);EXPECT_EQ(ret, 9);EXPECT_EQ(sum, 9);
}TEST_F(UnitTest, printfint6)
{int sum;   int ret = Targetfun::CalcSum(8, 9, &sum);EXPECT_EQ(ret, 17);EXPECT_EQ(sum, 17);
}

gmock 模拟函数参数(指针)返回
int Targetfun::CalcSum(int a, int b, int *sum)
{m_pCalcSum->sum = a + b;*sum = m_pCalcSum->sum;printf("%d\n", m_pCalcSum->sum);return m_pCalcSum->sum;
}bool Targetfun::CalcSumfun(int a, int b)
{int sum;CalcSum(a, b, &sum);printf("%d\n", sum);if (sum > 10){return true;}return false;
}//测试  
//参数占位  testing::_  
//<2>设置第2个参数返回值  testing::SetArgPointee<2>(sum)
//<num> num =0,1,2....
TEST_F(UnitTest, printfint7)
{int sum=15;   EXPECT_CALL(*this, CalcSum(testing::_, testing::_, testing::_)).WillOnce(testing::DoAll(testing::SetArgPointee<2>(sum), testing::Return(sum)));bool ret = Targetfun::CalcSumfun(5, 15);EXPECT_EQ(ret, true);
}

关键字:Gtest(Google Test)使用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: