中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

中國中小企業(yè)網(wǎng)站官網(wǎng)運營推廣計劃

中國中小企業(yè)網(wǎng)站官網(wǎng),運營推廣計劃,怎么做收費網(wǎng)站,企業(yè)網(wǎng)站備案要錢嗎引言 前文我們已經(jīng)講解了gmock的基本語法,但是gmock只能mock虛函數(shù),如果要mock非虛成員函數(shù)、靜態(tài)成員函數(shù)、全局函數(shù)、重載函數(shù)、模板函數(shù)以及其他依賴庫的函數(shù)時,gmock就很難實現(xiàn)。而cppmockfree可以支持這些函數(shù)的mock。 快速入門 1. m…

引言

前文我們已經(jīng)講解了gmock的基本語法,但是gmock只能mock虛函數(shù),如果要mock非虛成員函數(shù)、靜態(tài)成員函數(shù)、全局函數(shù)、重載函數(shù)、模板函數(shù)以及其他依賴庫的函數(shù)時,gmock就很難實現(xiàn)。而cppmockfree可以支持這些函數(shù)的mock。

快速入門

1. mock樣例

1.1 全局函數(shù)

// 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 成員函數(shù)

class Adder {
public:int add(int a, int b) const{return a + b;}
};
TEST(TestCppMockFree, CaseStaticMemberFunction) 
{auto mock = MOCKER(&Adder::add);// 針對類的成員函數(shù),要注意占位符會多出一個,即第一個為this指針// 而全局函數(shù)或者靜態(tài)成員函數(shù)占位符個數(shù)等于實際參數(shù)個數(shù)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 靜態(tài)成員函數(shù)

// 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 函數(shù)重載

// 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 模板類成員函數(shù)

// 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 外部庫函數(shù)

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之前請務(wù)必引入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

總結(jié)

  • CPPMockFree能夠支持幾乎所有場景下的接口mock
  • EXPECT_CALL的使用和gmock基本一致,更多的接口如:SaveArg、SetArgReferee等請參考gmock文檔
http://www.risenshineclean.com/news/38097.html

相關(guān)文章:

  • 湖北seo網(wǎng)站多少錢蘇州網(wǎng)站優(yōu)化排名推廣
  • 教學(xué)網(wǎng)站系統(tǒng)流程圖公司百度官網(wǎng)優(yōu)化
  • 中企網(wǎng)站建設(shè)app推廣軟件
  • 做兼職的網(wǎng)站 知乎如何制作視頻網(wǎng)站
  • 委托設(shè)計網(wǎng)站 要注意哪些問題哈爾濱關(guān)鍵詞排名工具
  • 杭州網(wǎng)站搜索排名國內(nèi)建站平臺
  • 做一個個人網(wǎng)站多少錢企業(yè)網(wǎng)站快速建站
  • 那里可以做旅游網(wǎng)站的嗎我們公司在做網(wǎng)站推廣
  • 線上線下購物商城系統(tǒng)衡陽seo快速排名
  • 國內(nèi)做的比較好的網(wǎng)站360優(yōu)化大師
  • 網(wǎng)站的透明圖片怎么做網(wǎng)絡(luò)服務(wù)主要包括
  • 網(wǎng)站開發(fā)定義名稱app優(yōu)化推廣
  • 怎么做網(wǎng)站推廣臨沂關(guān)鍵詞排名手機(jī)優(yōu)化軟件
  • 做網(wǎng)站用c語言可以嗎某個網(wǎng)站seo分析實例
  • 電腦版和手機(jī)版網(wǎng)站怎么做的營銷推廣策劃方案范文
  • 昆明免費網(wǎng)站制作南昌seo技術(shù)外包
  • 鄭州公共住宅建設(shè)投資有限公司網(wǎng)站一站式媒體發(fā)稿平臺
  • 1000學(xué)習(xí)做網(wǎng)站貴嗎搜索關(guān)鍵詞推薦
  • 網(wǎng)站建設(shè)報價明細(xì)表seo優(yōu)化運營
  • 廈門建站服務(wù)百度付費推廣的費用
  • 自助建站門戶網(wǎng)站東莞網(wǎng)絡(luò)優(yōu)化公司
  • 買模板建設(shè)網(wǎng)站亞馬遜關(guān)鍵詞工具哪個最準(zhǔn)
  • 電商 做圖 網(wǎng)站網(wǎng)站數(shù)據(jù)分析
  • 平東網(wǎng)站建設(shè)江北seo綜合優(yōu)化外包
  • 網(wǎng)頁游戲網(wǎng)站模板外貿(mào)平臺
  • 重慶房地產(chǎn)新聞上海網(wǎng)站seoseodian
  • 衡陽有線寬帶網(wǎng)站怎么做app推廣
  • 南京網(wǎng)站制作設(shè)計公司尋找客戶的12種方法
  • 企業(yè)寬帶可以做網(wǎng)站嗎安卓優(yōu)化大師手機(jī)版下載
  • 免費直播網(wǎng)站開發(fā)seo關(guān)鍵詞優(yōu)化排名