簡體   English   中英

GoogleMock-匹配器和MFC \\ ATL CString

[英]GoogleMock - Matchers and MFC\ATL CString

我在Google網上論壇上問了這個問題,但我想我會在這里得到更快的答復。

我正在嘗試使用Google的Mocking框架來測試我的代碼。 我也正在利用他們的測試框架 我正在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));

以上任何調用均產生相同的結果。 還有其他人遇到這個問題嗎?

這是輸出:

Google Mock嘗試了以下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

亞當

由於在將字符串傳遞給您的方法時並未復制它們,因此您真的需要檢查它們的值嗎? 寫下以下期望就足夠了:

CString szKey = _T("Some key");
CString szValue = _T("Some value");

EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));

...它將檢查提供給模擬方法的字符串確實是您期望的字符串(通過地址驗證),而不是副本或其他字符串。

關於為什么罐頭匹配器不能與CString ,我懷疑這是因為CString沒有覆蓋operator()==或匹配器實現沒有針對CString的顯式專門化。

最終是另一個錯誤。 嘆了口氣 ,實際上是在抓一個錯誤。...Google Mocks可以比較CStrings了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM