我在Google Group上問過這個問題,但我想我會在這裏得到更快的響應。GoogleMock - Matchers和MFC ATL CString
我正在嘗試使用Google's Mocking framework來測試我的代碼。我也在利用他們的test framework。我正在編譯VC9。 我遇到的問題與MFC \ ATL CStrings的參數匹配。 GMock 表示對象不相等,它看起來是在對指針地址的 進行評估。我試圖嘲弄的方法的結構 像這樣:
void myMethod(const CString & key, const CString & value);
這樣的:
MOCK_METHOD2(myMethod, void(const CString & key , const CString &
value);
當設置我的期望,我在做以下比較:
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(Eq(szKey), Eq(szValue))).WillOnce(Return
(true));
我有嘗試了許多不同的匹配器組合,例如:
EXPECT_CALL(myMock, myMethod(StrCaseEq(_T("Some Key")), StrCaseEq(_T
(""Some value)))).WillOnce(Return(true));
EXPECT_CALL(myMock, myMethod(TypedEq<const CString &>(szKey),
TypedEq<const CString &>(szValue))).WillOnce(Return(true));
EXPECT_CALL(myMock, myMethod(TypedEq<const CString &>(szKey),
TypedEq<const CString &>(szValue))).WillOnce(Return(true));
以上任何一個調用都產生了相同的結果。其他人運行 到這個問題?
這是輸出:
谷歌模擬嘗試了以下2點的預期,但沒有匹配:
:80: tried expectation #0
Expected arg #1: is equal to 006D430C pointing to "Some value"
Actual: 4-byte object <A8EF 1102>
Expected: to be called once
Actual: never called - unsatisfied and active
:83: tried expectation #1
Expected arg #1: is equal to (ignoring case) ""
Actual: 4-byte object <A8EF 1102>
Expected arg #2: is equal to (ignoring case) "Some value"
Actual: 4-byte object <C0EE 1102>
Expected: to be called once
Actual: never called - unsatisfied and active
亞當
「有些價值」是'myMethod'中的一個常量。比較之間的比較是我提供的「一些價值」模擬和在該方法中產生的「一些價值」。此外,CString會覆蓋運算符()==,所以我會假設Eq(v)函數至少可以利用它。感謝您的輸入! – 2009-10-19 18:40:46
我明白了。如果「Some Value」無法訪問,那麼您可能需要嘗試'ResultOf'匹配器,它會根據函數的輸入參數執行您選擇的謂詞。對於字符串匹配來說這似乎過分了,但可能會提供一些線索,說明其他匹配器不工作的原因。 – 2009-10-19 18:54:01