当前位置: 首页 > news >正文

吉恩聊城网站建设佛山网站建设 骏域

吉恩聊城网站建设,佛山网站建设 骏域,广告设计优秀作品,短租房网站哪家做最好引言 前文我们学习了gtest相关的使用#xff0c;单靠gtest#xff0c;有些场景仍然无法进行测试#xff0c;因此就诞生了gmock。 gmock快速入门 在引入gtest时#xff0c;gmock也同样引入了#xff0c;因此只需要在编译时加上合适的编译选项即可#xff0c;注意不同版…引言 前文我们学习了gtest相关的使用单靠gtest有些场景仍然无法进行测试因此就诞生了gmock。 gmock快速入门 在引入gtest时gmock也同样引入了因此只需要在编译时加上合适的编译选项即可注意不同版本的gtest在使用上可能会有所不同当前为v1.10版本。 1. 待测试文件 #ifndef __HELLO_H__ #define __HELLO_H__#include iostream #include stringclass Tigger{ public:Tigger(){}virtual ~Tigger() {}virtual bool eat(const std::string food){if (food meat) {return true;}return false;} }; class FeedTigger { public:Tigger* _tigger;FeedTigger(Tigger* tigger){_tigger tigger;}bool feed(const std::string food){if (_tigger !NULL _tigger-eat(food)) {return true;}return false;} }; #endif2. 单测文件 #include hello.h #include gtest/gtest.h #include gmock/gmock.husing namespace ::testing;namespace {class MockTigger : public Tigger { public:MOCK_METHOD1(eat, bool(const std::string)); }; TEST(TestTigger, CaseEat) {Tigger tigger;FeedTigger feed_tigger0(tigger);EXPECT_FALSE(feed_tigger0.feed(grass));MockTigger mock_tigger;FeedTigger feed_tigger1(mock_tigger);ON_CALL(mock_tigger, eat(_)).Times(1).WillRepeatedly(::testing::Return(0));EXPECT_TRUE(feed_tigger1.feed(grass)); } }可以看到第一次在传入grass这个参数时程序必定返回false而第二次我们使用了mock之后的结果也就是说无论传入什么参数返回的结果都会是true。 3. makefile文件 CXX g CXXFLAGS -Wall LIBES -lgtest -lgmock -lgtest_main -lpthread LPATH -L/tools/googletest/1.11.0/build/lib # 替换成自己lib路径 HPATH -I/tools/googletest/1.11.0/googletest/include/ # 替换成自己的 include路径 HPATH -I/tools/googletest/1.11.0/googlemock/include/ # 替换成自己的 include路径UTEST_OBJD hello_unit_testhello_unit_test:hello_unit_test.cpp${CXX} -o $ $ -I ../ ${HPATH} ${CXXFLAGS} ${LIBES} ${LPATH}clean:rm -rf *_unit_testgmock常用宏 1. MOCK_METHODx 其中x表示参数个数如 MOCK_METHOD0(func1, void()); MOCK_METHOD1(func2, int(int)); MOCK_METHOD2(func3, int(int, int));第一个参数funcx表示函数名第二个参数为函数返回值和参数列表。若是mock一个模板类的成员函数只需要使用MOCK_METHODx_T即可。 2. ON_CALL ON_CALL(mock, func3(_, 1)).Times(4).WillOnce(Return(0)).WillOnce(Return(1)).WillRepeatedly(Return(2));func3中的参数 ‘_’表示匹配任意参数1表示匹配指定参数即参数为1时才能匹配否则不会调用mock方法 Times表示mock方法执行多少次WillOnce指定一次返回结果WillRepeatedly指定每次返回同样的结果上述指定mock结果之后程序会在第一次调用func2方法时返回0第二次返回1第三次和第四次都返回2第五次及之后返回真实结果。以上为基本用法更多好玩的用法请参考官方文档 3. EXPECT_CALL EXPECT_CALL宏在使用上与ON_CALL宏区别不大可以参照其进行使用主要区别在于EXPECT_CALL宏在指定调用次数Times后如指定了调用3次程序必须调用被mock的函数使得mock结果生效3次否则就会报测试失败或异常而ON_CALL则不会。所以当确实需要mock结果生效指定次数时那么就选择使用EXPECT_CALL。 总结 本篇主要讲解了如何快速入门gmock以及基本语法。gmock原理其实就是利用了多态的特性通过继承需要被mock的类然后重写其虚函数在使用时将被mock的对象替换成mock后的对象这样在运行时就可以调用mock后的对象方法从而达到测试预期。因此gmock本身只能mock虚函数而对于non-virtual函数如非虚成员函数、静态成员函数、全局函数、外部依赖库的函数等该如何进行mock呢我们将在下一篇章来介绍。
http://www.dnsts.com.cn/news/280328.html

相关文章:

  • 技能网站建设项目需求网站的开发和建设有什么区别
  • 网站开发要服务器吗怎么把做的网站发布
  • 网站定制一般价格多少官方网站下载免费app
  • 企业网站建设的基本流程重庆建筑工程信息管理平台
  • 网站建设 项目书 框架温州做网站哪家比较好
  • 没有服务器怎样做网站php网站集成支付宝接口
  • 曲阳有没有做网站里制作网线
  • 呼和浩特做网站的公司辽宁建设工程信息网直接发包工程
  • 泰州市网站建设制作做企业形象网站
  • 广州做餐饮的招聘网站wordpress 团购 主题
  • 黄石专业网站建设推广多网站后台问题
  • 深圳集团网站建设公司今天最新新闻摘抄
  • 网站建网站建设企业网站建设价格与哪些
  • 无锡网站关键词推广开发一个进销存app需要多少钱
  • 网站怎么挣钱成都住建局官网app
  • 建设工程的招标网站有哪些30岁学编程还能找到工作吗
  • 杭州网站建设岗位薪资电子商务seo是指什么意思
  • 北京专业网站建设大全电商网站排行
  • 购物网站源码下载如何利用网站开发国外客户
  • 建网站需要买些什么品牌建设三年行动计划
  • 网站界面分析wordpress加链接地址
  • 跨境o2o网站建设方案如何优选网站建设公司
  • 焦作网站建设公司哪家好阿里云 wordpress rds
  • wordpress 站点网络泉州网站建设电话
  • 长沙制作网站软件长春专业企业网站建设价格
  • 用云主机做网站网页设计与制作教程第5版
  • asp.net网站开发简介百度搜索开放平台
  • 网站建设案例精英站长工具查询
  • 网站首页布局有哪些百度小说搜索风云榜
  • 网站建设十年经验远程it外包服务