编程记录——google test框架 打桩

打桩的两种方式

       单元测试中为了隔离外部引用的库,或因外部库没有写好,但要测试本单元代码的逻辑,跑代码覆盖率。为了使外部库或类能给出期望值跑本单元的逻辑分支,故将使用的外部函数打桩,mock为模拟或仿制的意思。

       将被隔离的类库内部实现的类内部接口进行打桩,把这些函数写成纯虚函数,xxxMock对这些函数进行重新定义实现,从而达到得到期望输出的目的。

MOCK_METHOD3表示该函数有3个参数,若该函数原来是个const函数,则为MOCK_CONST_METHOD3,目的为声明被mock函数

.cpp

由于该类有实现接口定义,所以将其内部类写成该类实现接口的纯虚函数,重写该内部类,即重写了目标函数。在.h中mock内部类对象重写其函数实现,在.cpp中mock其实现且得到mock,在ut中MockObj即声明了一个全局mock指针,后续可以指向mocked函数。如下使用:

EXPECT_CALL表示调用的mocked函数的次数分别返回什么,::_表示被mock函数参数占位,DoAll表示按括号中所有返回所需期望,SetArgReferee<2>(output1)表示第3个参数返回期望的output1。

因为此type()为纯虚函数

以上两种方法都是得到一个mock类的对象,利用对象的函数替换真正函数得到期望。

       打桩注意桩是对被用到的头文件打桩。若头是上述类或内部类,则打桩方法如上;若头是函数接口或external “C”函数接口,则桩头文件定义也是纯虚基类,但实现是external “C”+该接口名称,而非上述被桩类+该接口名称!!!

注意桩头宏定义与真正的头文件宏定义不要冲突,否则真正头文件定义接口不起作用,桩头需引用被桩头文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值