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 目標 ...