2012-02-22 63 views
3

我正在測試我的類是否調用模擬類的方法,並帶有正確的參數。我建立了一個基本的期望:googlemock匹配器輸出參數

// mListener is a mocked object 
// This expectation accepts any argument 
EXPECT_CALL(this->mListener, OnChanged(_)) 
    .Times(1); 

這很好,但我也想驗證參數。這是一個對象,只有使用輸出參數存取:

// aValue is an output parameter 
HRESULT get_Value(int* aValue); 

我如何定義一個匹配,將檢查值get_Value付諸aValue

回答

3

你可以嘗試這樣的:

MATCHER_P(CheckValue, 
      expected_value, 
      std::string("get_Value ") 
       + (negation ? "yields " : "doesn't yield ") 
       + PrintToString(expected_value) 
       + " as expected.") { 
    int result; 
    arg.get_Value(&result); 
    return expected_value == result; 
} 

可能檢查例如aValue == 7通過這樣做:

EXPECT_CALL(this->mListener, OnChanged(CheckValue(7))) 
    .Times(1); 
+0

完美,謝謝! googlemock食譜頁面上有關於自定義匹配器的信息:http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Parameterized_Matchers_Quickly – 2012-02-23 14:17:20

+0

另外我添加了一些自定義打印代碼,這樣當測試失敗時,我會得到一些數字,而不是我的對象的前幾個字節。 http://code.google.com/p/googletest/wiki/AdvancedGuide#Teaching_Google_Test_How_to_Print_Your_Values – 2012-02-23 16:32:45