使用gmock時,有時候需要向被mock的函式輸入一些自定以引數,用來測試呼叫mock的方法的各種的執**況。前幾天在專案中遇到這個問題,並使用了該技巧,覺得很有用,所以總結出來,作為備忘。
class ***client ;
內部有個函式query***,用於執行查詢操作。查詢的響應物件通過引用的方式傳回給呼叫物件,避免不必要的物件拷貝。
現在有個類,會呼叫***client::query***方法,如下面所示:
class ***runner
};
現在希望做的是在測試用例中設定各種輸出(orsp),測試呼叫query***之後的**邏輯,更重要的是,不希望為了執行單元測試,專門搭建乙個伺服器與***client互動,成本太高。
gmock的解決方法
gmock內部實現了一系列action的巨集,可以幫我們完成上面的需求。先看看**,首先mock我們的***client,
class ***clientmock : public ***client
;
mock的***client後,我們就可以使用mock物件在單元測試中測試了。
test(***runnertc, setargrefereedemo)
好了,現在解決了本文開始提出的問題,可以捎帶做一點擴充套件閱讀。上面用的一些api,在gmock中稱之為action(行為),主要目的是方便快速的為mock類提供測試行為,用於測試。上面,填充orsp物件就是用setargreferee(value)行為實現的,通過名字,可以知道這個行為物件是用於設定引數,n是引數的索引,從0開始。類似的行為還有setargpointee(value),設定指標引數, setarrayargument(first, last),設定陣列引數,陣列範圍[first,last)。
有時候,可能需要設定引數和返回值,也就是同時設定多個行為,那麼可以使用doall函式幫我們實現,doall相當於乙個action的集合,使用示例如下:
…
expect_call(omock, query***(_, _)).
willonce(doall(setargreferee<1>(orsp), return(someobj))));
…
還可以通過invoke行為,將負責的測試行為新增進來。
用了gtest&gmock框架一段時間了,發現使用之他們之後,的確可以提公升**質量,並且加快bug定位,從某個側面來說,提高的編碼效率。現在,不論用什麼語言寫程式,在熟悉了語言本身之後,第一件事就是去熟悉這門語言相關的單元測試框架。
個人認為寫單元測試不只是一種行為,更是一種信仰。
MUI自定義事件傳參
在mui中頁面之間的傳參一般是分為兩種的,一種是通過開啟頁面或者預載入頁面的時候傳遞引數,另一種就是自定義事件了,我們來說說自定義事件傳參的問題 我們來分兩種情況 一,頁面已經存在的時候 這種情況是很容易的,直接就是mui.fire 目標頁面,事件名稱,二,頁面是新建立的 如果你是這麼寫的話 var...
mybatis自定義傳參排序
getvirtualtaskdetailandinfo parametertype map resulttype map select t.id,t.task num,t.province,t.city,t.status t.create time,t.enable time,t.end time,...
自定義指令函式傳參
vue 2.6.6 繫結函式傳參 傳參多個多樣 引數動態變化 1.採用傳物件方式 binding.value 測試 const mydirective export default mydirective以上解決了問題1.繫結函式傳參,對於問題2.傳參多個多樣可以給args乙個物件,或者用陣列 測試...