国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

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

中國(guó)中小企業(yè)網(wǎng)站官網(wǎng)運(yùn)營(yíng)推廣計(jì)劃

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

引言

前文我們已經(jīng)講解了gmock的基本語(yǔ)法,但是gmock只能mock虛函數(shù),如果要mock非虛成員函數(shù)、靜態(tài)成員函數(shù)、全局函數(shù)、重載函數(shù)、模板函數(shù)以及其他依賴庫(kù)的函數(shù)時(shí),gmock就很難實(shí)現(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);// 針對(duì)類的成員函數(shù),要注意占位符會(huì)多出一個(gè),即第一個(gè)為this指針// 而全局函數(shù)或者靜態(tài)成員函數(shù)占位符個(gè)數(shù)等于實(shí)際參數(shù)個(gè)數(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 外部庫(kù)函數(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之前請(qǐng)務(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能夠支持幾乎所有場(chǎng)景下的接口mock
  • EXPECT_CALL的使用和gmock基本一致,更多的接口如:SaveArg、SetArgReferee等請(qǐng)參考gmock文檔
http://m.aloenet.com.cn/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è)計(jì)網(wǎng)站 要注意哪些問(wèn)題哈爾濱關(guān)鍵詞排名工具
  • 杭州網(wǎng)站搜索排名國(guó)內(nèi)建站平臺(tái)
  • 做一個(gè)個(gè)人網(wǎng)站多少錢企業(yè)網(wǎng)站快速建站
  • 那里可以做旅游網(wǎng)站的嗎我們公司在做網(wǎng)站推廣
  • 線上線下購(gòu)物商城系統(tǒng)衡陽(yáng)seo快速排名
  • 國(guó)內(nèi)做的比較好的網(wǎng)站360優(yōu)化大師
  • 網(wǎng)站的透明圖片怎么做網(wǎng)絡(luò)服務(wù)主要包括
  • 網(wǎng)站開(kāi)發(fā)定義名稱app優(yōu)化推廣
  • 怎么做網(wǎng)站推廣臨沂關(guān)鍵詞排名手機(jī)優(yōu)化軟件
  • 做網(wǎng)站用c語(yǔ)言可以嗎某個(gè)網(wǎng)站seo分析實(shí)例
  • 電腦版和手機(jī)版網(wǎng)站怎么做的營(yíng)銷推廣策劃方案范文
  • 昆明免費(fèi)網(wǎng)站制作南昌seo技術(shù)外包
  • 鄭州公共住宅建設(shè)投資有限公司網(wǎng)站一站式媒體發(fā)稿平臺(tái)
  • 1000學(xué)習(xí)做網(wǎng)站貴嗎搜索關(guān)鍵詞推薦
  • 網(wǎng)站建設(shè)報(bào)價(jià)明細(xì)表seo優(yōu)化運(yùn)營(yíng)
  • 廈門建站服務(wù)百度付費(fèi)推廣的費(fèi)用
  • 自助建站門戶網(wǎng)站東莞網(wǎng)絡(luò)優(yōu)化公司
  • 買模板建設(shè)網(wǎng)站亞馬遜關(guān)鍵詞工具哪個(gè)最準(zhǔn)
  • 電商 做圖 網(wǎng)站網(wǎng)站數(shù)據(jù)分析
  • 平東網(wǎng)站建設(shè)江北seo綜合優(yōu)化外包
  • 網(wǎng)頁(yè)游戲網(wǎng)站模板外貿(mào)平臺(tái)
  • 重慶房地產(chǎn)新聞上海網(wǎng)站seoseodian
  • 衡陽(yáng)有線寬帶網(wǎng)站怎么做app推廣
  • 南京網(wǎng)站制作設(shè)計(jì)公司尋找客戶的12種方法
  • 企業(yè)寬帶可以做網(wǎng)站嗎安卓?jī)?yōu)化大師手機(jī)版下載
  • 免費(fèi)直播網(wǎng)站開(kāi)發(fā)seo關(guān)鍵詞優(yōu)化排名