mockcpp使用方法簡明指導

2021-09-21 21:41:01 字數 2434 閱讀 7543

mockcpp使用方法簡明指導mock工具介紹

mock工具的作用是指定函式的行為(模擬函式的行為)。可以對入參進行校驗,對出參進行設定,還可以指定函式的返回值。

(1)mock規範:每個mocker(function)開始,跟一系列的.stubs、.with、.will等的內容的整體,稱為乙個mock規範。

(2)核心關鍵字:指stubs/defaults/expects/before/with/after/will/then/id等這些直接跟在點後面的關鍵字。

(3)擴充套件關鍵字:指once()/eq()/check()/returnvalue()/repeat()等這些作為核心關鍵字引數的關鍵字。

下面,請看兩段mockcpp的使用規範示例**,其中帶「/」或者「|」的表示在該位置可能有多種選擇;帶中括號的表示是可選的。

mockcpp的sample**

一段簡單的mockcpp使用sample**:(帶有完整核心關鍵字)

test(mockcpp ****** sample)

下面是一段比較詳細的mockcpp使用sample**:(帶有完整擴充套件關鍵字)

test(mockcpp detail sample)

注: 1、擴充套件關鍵字分類:

expects裡面的叫匹配關鍵字(matcher);

with裡面的叫約束關鍵字(constraint);

will/then裡面的叫樁關鍵字(stub)。

2、spy的作用是監視執行該被mock的函式function被呼叫時傳入的值,會儲存在var_out中,供用例中其它地方使用。

3、outbound的作用是設定函式function的出參的值。多半是把該值作為後面部分被測**的輸入。(注意與spy區別)

4、outboundp,與outbound作用相同,只是用於陣列的情況。

5、mirror的作用是對陣列型別的入參進行檢查。(outboundp是設定出參的值,兩者是不同的)

6、check的作用是進行定製化的入參檢查,比如只檢查結構體的部分成員。可以通過函式指標或者仿函式的方式指定,用仿函式還能預先儲存一些值,非常方便。(有些mock工具叫它follow)

7、check也能夠用於設定出參的情況。

8、die表示程式退出,並且返回指定的值。它是異常退出,用於模擬乙個函式呼叫崩潰的情況。

9、increase(from, to),表示依次返回from到to的物件,任何過載了++運算子的物件都可以用。

10、outbound和outboundp都可以帶乙個約束引數,用於對引數進行檢查,因為有同時作為in和out的引數。(如:outbound(var_out, eq(3))  )

下面是結合上面sample的mockcpp使用說明

1、mock c函式或者類的靜態成員方法用mocker; 

mock 類的非靜態成員方法需要先用mockobjectmocker;宣告乙個mock物件,再用mock_method(mocker, method)來mock指定方法。

2、緊跟著mocker/mock_method之後的是stubs、或者defaults、或者expects,三個必須有乙個。(這是與amock不同的地方,在這個層次上確定這三個關鍵字必須有乙個,可以讓mock語法更清晰)

stubs 表示指定函式的行為,不校驗次數。

expects 與stubs的區別就是校驗次數。(.expects(once()) / .expects(never()) / .expects(exactly(123)))

defaults 表示定義乙個預設的mock規範,但它優先順序很低;如果後面有stubs或者expects重新指定函式行為,就會按照新指定的來執行。(一般用在setup中)

3、用will指定函式的返回值;

如果要指定20次呼叫都返回1,則用.will(repeat(1, 20));

要指定第一次返回1,第二次返回2,第三次返回3,就用

.will(returnvalue(1))

.then(returnvalue(2))

.then(returnvalue(3))

如果你指定了前三次的返回值依次為1、2、3,那麼第四次、第五次呼叫,都是返回最後的返回值3。

4、用id給乙個mock規範指定乙個名字,然後可以用after、before來指定多個mock應該的呼叫順序。

注意before在with前,after在with後,id在整個mock規範的最後。

5、使用mockcpp時,校驗是否按照mock規範進行呼叫的,應該用:

globalmockobject::verify();

verify之後,會自動執行reset。(如果是物件的mock,應該用mocker.verify(),同樣也會自動reset。)

如果單單只想reset,也可以:(這很少見,難道前面你定義的mock規範都不想要了,也不校驗?那為何要定義呢?)

globalmockobject::reset();

一般是在teardown中呼叫verify。

proxool簡明使用方法

proxool的2種連線方法 首先從 http proxool.sourceforge.net proxool 0.9.0 rc2.zip 解壓後,把commons logging.jar和proxool 0.9.0 rc2.jar放到工程的lib資料夾裡面。方法一 和jdbc連線方法類似。jdbc...

makefile簡明使用方法

命令前面加乙個減號的意思是,該命令如果出錯也不停止 命令前面加 的意思是,這個命令將不顯示出來 makefile中的變數其實就是c語言中的巨集 定義的變數不能使用後面定義的變數 定義的變數可以使用後面的變數 是追加 例如,a 5 b c 5 b b mb是5m,c是5 vpath變數 make會在當...

gcc編譯器使用簡明指南

gcc編譯器使用簡明指南 file.c c程式原始檔 file.i c程式預處理後檔案 file.cxx c 程式原始檔,也可以是file.cc file.cpp file.c file.ii c 程式預處理後檔案 file.h c c 標頭檔案 file.s 匯程式設計序檔案 file.o 目標 ...