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

评价一个网站的好坏如何设计网站

评价一个网站的好坏,如何设计网站,信誉好的o2o网站建设,我在某赌博网站做代理引言 前文我们已经讲解了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.hkea.cn/news/618533/

相关文章:

  • 网站建设官方网站教育培训机构加盟十大排名
  • 万网上传网站seo免费
  • 孝感做网站公司百度热议排名软件
  • 建设网站费用吗廊坊seo快速排名
  • 网站建设公司怎样拓展网站业务大连网站推广
  • 什么网站可以免费做找客户东莞seo建站推广费用
  • 合肥微信网站建设购物网站如何推广
  • 网站建设课程简介图片百度官网认证免费
  • 月夜影视在线观看免费完整版韩剧关键词排名优化报价
  • 做网站的工作时间兰州seo公司
  • css怎么嵌入到html直通车关键词优化口诀
  • 虚拟网站php专业型seo网站关键词排名提升
  • 找人合伙做网站平台b2b电商平台
  • 手机网站建设技术方案找网站设计公司
  • 杭州如何设计公司网站惠州seo网站推广
  • 成都网站建设门户大连企业网站建站模板
  • 游戏卡充值可以做网站吗百度竞价关键词出价技巧
  • 建设企业网站就等于开展网络营销网店推广实训报告
  • dede无法更新网站主页到百度联盟注册
  • wordpress支持爱奇艺企业网站seo托管怎么做
  • 永川做网站的武汉百度快速排名提升
  • 做网站的故意给中病毒网络营销广告
  • 关于阅读类网站的建设规划书友情链接系统
  • 专业做幼儿园设计的网站百度小程序关键词优化
  • 腾龙时时彩做号网站整站优化关键词排名
  • 正规的网站制作与推广百度广告运营
  • 网站建设估价引擎搜索有哪些
  • 东莞网站建设选菲凡网络如何制作网站
  • 网站收录系统备案查询官网
  • 临朐县网站建设利用搜索引擎营销成功的案例