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

郑州做网站的专业公司有哪些百度推广开户多少钱

郑州做网站的专业公司有哪些,百度推广开户多少钱,wordpress 漏斗式搜索插件,佛山企业网站制作哪家好引言 前文我们已经讲解了gmock的基本语法,但是gmock只能mock虚函数,如果要mock非虚成员函数、静态成员函数、全局函数、重载函数、模板函数以及其他依赖库的函数时,gmock就很难实现。而cppmockfree可以支持这些函数的mock。 快速入门 1. m…

引言

前文我们已经讲解了gmock的基本语法,但是gmock只能mock虚函数,如果要mock非虚成员函数、静态成员函数、全局函数、重载函数、模板函数以及其他依赖库的函数时,gmock就很难实现。而cppmockfree可以支持这些函数的mock。

快速入门

1. mock样例

1.1 全局函数

// gloabal function
int g_func(int a, int b)
{return a + b;
}
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "cpp_free_mock.h"
#include <string>using namespace ::testing;
using namespace ::CppFreeMock;namespace {
TEST(TestCppMockFree, CaseGlobalFunction) 
{auto mock = MOCKER(g_func);EXPECT_CALL(*mock, MOCK_FUNCTION(_, _)).WillOnce(Return(1)).WillRepeatedly(Return(2));EXPECT_EQ(1, g_func(1, 2));EXPECT_EQ(2, g_func(12, 2));mock->RestoreToReal();EXPECT_EQ(14, g_func(12, 2));
}

1.2 成员函数

class Adder {
public:int add(int a, int b) const{return a + b;}
};
TEST(TestCppMockFree, CaseStaticMemberFunction) 
{auto mock = MOCKER(&Adder::add);// 针对类的成员函数,要注意占位符会多出一个,即第一个为this指针// 而全局函数或者静态成员函数占位符个数等于实际参数个数EXPECT_CALL(*mock, MOCK_FUNCTION(_, _, _)).WillRepeatedly(Return(2));Adder adder;EXPECT_EQ(2, adder.add(1, 2));EXPECT_EQ(2, adder.add(12, 2));mock->RestoreToReal();EXPECT_EQ(14, g_func(12, 2));
}

1.3 静态成员函数

// static member function
class Printer {
public:static std::string print(const std::string& str){return str;}
};
TEST(TestCppMockFree, CaseStaticMemberFunction) 
{auto mock = MOCKER(Printer::print);EXPECT_CALL(*mock, MOCK_FUNCTION(_)).WillRepeatedly(Return(std::string("mocker")));EXPECT_STREQ("mocker", Printer::print("hello").c_str());mock->RestoreToReal();EXPECT_STREQ("hello", Printer::print("hello").c_str());
}

1.4 函数重载

// overload function
class OverloadFunc {
public:int foo() { return 0; }int foo(int a) { return a;}
};
TEST(TestCppMockFree, CaseOverloadFunction) 
{OverloadFunc overload_func;typedef int (OverloadFunc::*FuncType0)();typedef int (OverloadFunc::*FuncType1)(int);auto mock0 = MOCKER((FuncType0)&OverloadFunc::foo);EXPECT_CALL(*mock0, MOCK_FUNCTION(_)).WillRepeatedly(Return(2));EXPECT_EQ(2, overload_func.foo());auto mock1 = MOCKER((FuncType1)&OverloadFunc::foo);EXPECT_CALL(*mock1, MOCK_FUNCTION(_,  _)).WillRepeatedly(Return(2));EXPECT_EQ(2, overload_func.foo(1));mock0->RestoreToReal();mock1->RestoreToReal();EXPECT_EQ(2, overload_func.foo(1));mock0->RestoreToReal();mock1->RestoreToReal();EXPECT_EQ(0, overload_func.foo());EXPECT_EQ(1, overload_func.foo(1));
}

1.5 模板类成员函数

// template class
template <class T>
class AdderT {
public:T add(T a, T b) { return a + b; }T add(T a, T b, T c) { return a + b + c; }T adder(T a) { return a; }
};
TEST(TestCppMockFree, CaseTemplateFunction) 
{AdderT<int> adder;// overload functiontypedef int (AdderT<int>::*FuncType0)(int, int);auto mock0 = MOCKER((FuncType0)&AdderT<int>::add);EXPECT_CALL(*mock0, MOCK_FUNCTION(_, _, _)).WillRepeatedly(Return(1));EXPECT_EQ(1, adder.add(1, 2));auto mock1 = MOCKER((FuncType1)&AdderT<int>::add);EXPECT_CALL(*mock1, MOCK_FUNCTION(_, _, _, _)).WillRepeatedly(Return(1));EXPECT_EQ(1, adder.add(1, 2));auto mock1 = MOCKER((FuncType1)&AdderT<int>::add);EXPECT_CALL(*mock1, MOCK_FUNCTION(_, _, _, _)).WillRepeatedly(Return(1));EXPECT_EQ(1, adder.add(1, 2, 3));mock0->RestoreToReal();mock1->RestoreToReal();EXPECT_EQ(3, adder.add(1, 2));EXPECT_EQ(6, adder.add(1, 2, 3));// normal functionauto mock2 = MOCKER(&AdderT<int>::adder);EXPECT_CALL(*mock2, MOCK_FUNCTION(_, _)).WillRepeatedly(Return(1));EXPECT_EQ(1, adder.adder(2));mock2->RestoreToReal();EXPECT_EQ(2, adder.adder(2));
}

1.6 外部库函数

TEST(TestCppMockFree, CaseOtherLibrary)
{auto mock = MOCKER(std::atoi);EXPECT_CALL(*mock, MOCK_FUNCTION(_)).WillRepeatedly(Return(22867));EXPECT_EQ(22867, std::atoi("123"));mock->RestoreToReal();EXPECT_EQ(123, std::atoi("123"));
} 

2. 引入cppmockfree

git clone https://github.com/gzc9047/CppFreeMock.git

注意在引入cppmockfree之前请务必引入gtest和gmock。如何引入,在我之前的文章中均有提及。

3. makefile

CXX = g++
CXXFLAGS = -Wall
LIBES = -lgtest -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/xxx/cpp_freemock/ #替换成自己的include路径UTEST_OBJD = hello_unit_testhello_unit_test:hello_unit_test.cpp${CXX} -o $@ $+ -I ../ ${HPATH} ${CXXFLAGS} ${LIBES} ${LPATH}clean:rm -rf *_unit_test

总结

  • CPPMockFree能够支持几乎所有场景下的接口mock
  • EXPECT_CALL的使用和gmock基本一致,更多的接口如:SaveArg、SetArgReferee等请参考gmock文档
http://www.yayakq.cn/news/600598/

相关文章:

  • 河北省建设机械会网站首页lfw wordpress
  • 网站的建设及维护报告网站建设工作任务
  • 网站运行速度优化淘客网站后台怎么做
  • 定制网站开发商业计划书网站建设人员培训
  • 青岛信息推广网站wordpress get_pages
  • 做计算机网站到哪个网站做任务
  • 湖南平台网站建设公司app开发公司哪家好
  • 网站运营策划方案视频网站开发应用到哪些技术
  • 绍兴网站建设制作网站维护与建设实训心得
  • 个人做网站开发天津市建设工程合同备案网站
  • 上海网站建设排行蓝盟it外包
  • 可以登录国外网站吗wordpress动态导航
  • 一般网站的宽度是多少像素项目概述
  • 网站建设完成后交付方式网站建设职能
  • 网站小视频怎么做代理个人怎么做动漫短视频网站
  • discu论坛网站模板建设电商网站的总结
  • 网站建设忄金手指专业东莞网络推广外包
  • 百度不收录新网站服务器域名ip网址大全
  • 上海平台网站建设公司排名友情链接格式
  • 企业 办公 网站模板下载种子搜索神器
  • 滑县网站建设login to view all v2.0 wordpress
  • 如何查询网站开发商网站改版 更换域名
  • 高端设计网站平台防恶意竞价点击软件
  • 公司网站 模板优化seo培训班
  • 最有效的网站推广方法兰州手机网站制作
  • 网站开发的pc或移动端模型评测网站怎么做
  • 个人可以做网站推广想做跨境电商怎么入门
  • html创建站点的步骤租用网站服务器价格
  • 南京房地产网站建设电玩网站
  • 服务器搭建网站跑不满宽带吉林市百姓网免费发布信息网