Posted on 2009-09-12 00:40
S.l.e!ep.¢% 閱讀(370)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
test
Google開源其C++ Mocking框架
作者 Abel Avram譯者 張龍發(fā)布于 2008年12月18日 上午9時(shí)49分
-
.NET
,
-
Java
- 主題
-
工件和工具
- 標(biāo)簽
-
Google
,
-
Mocks
幾個(gè)月前Google開源了其C++測(cè)試框架,現(xiàn)在Google又基于BSD協(xié)議將其C++ Mocking框架Google Mock開源。
在Google內(nèi)部Google Mock被用在100多個(gè)項(xiàng)目中,根據(jù)Google軟件工程師Zhanyong Wan所說,Google Mock的靈感來自于jMock和EasyMock。該框架可用在Linux、Windows及Mac OS X上,面向C++開發(fā)者。Zhanyong給出了一個(gè)mocking的例子:
class TaxServer {?? // Returns the tax rate of a location (by postal code) or -1 on error.
? virtual double FetchTaxRate(
??? const string& postal_code) = 0;
? virtual void CloseConnection() = 0;
};
class MockTaxServer : public TaxServer {???? // #1
? MOCK_METHOD1(FetchTaxRate, double(const string&));
? MOCK_METHOD0(CloseConnection, void());
};
TEST(ShoppingCartTest,? StillCallsCloseIfServerErrorOccurs) {
? MockTaxServer mock_taxserver;????????????? // #2
? EXPECT_CALL(mock_taxserver, FetchTaxRate(_)).
WillOnce(Return(-1));?????????????????? // #3
? EXPECT_CALL(mock_taxserver, CloseConnection());
? ShoppingCart cart(&mock_taxserver);??????? // #4
? cart.CalculateTax();? // Calls FetchTaxRate()
??????????????????????? // and CloseConnection().
}??????????????????????????????????????????? // #5
-
從接口派生出mock類。對(duì)于每個(gè)虛方法,計(jì)算它的參數(shù)個(gè)數(shù)、名字和結(jié)果n,然后使用MOCK_METHODn進(jìn)行定義,其參數(shù)就是方法的名字和類型。
-
創(chuàng)建該mock類的一個(gè)實(shí)例。當(dāng)你使用真實(shí)對(duì)象時(shí),實(shí)際使用的就是該mock對(duì)象。
-
設(shè)置該mock對(duì)象的期望(是否會(huì)被使用?將要做什么?)。例如,第一個(gè)EXPECT_CALL表示會(huì)調(diào)用FetchTaxRate()并返回一個(gè)錯(cuò)誤。underscore (_)是一個(gè)匹配器(matcher),表示參數(shù)可以是任何值。Google Mock有很多可用的匹配器,你可以使用他們精確指定參數(shù)是什么。你還可以定義自己的匹配器或者使用一個(gè)確定的值。
-
使用mock對(duì)象的測(cè)試代碼。如果某個(gè)mock方法的調(diào)用次數(shù)超過了期望值或是參數(shù)不正確你就會(huì)立刻看到一個(gè)錯(cuò)誤。
-
當(dāng)mock對(duì)象銷毀時(shí),系統(tǒng)會(huì)檢查其上的期望是否都滿足了。
這里是一些有用的鏈接:Google Mock主頁、完整的文檔及二進(jìn)制下載。Google Mock for Dummies是對(duì)Google Mock的一個(gè)快速介紹,它還包含一些例子和說明。