Я задал этот вопрос в группе 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
Адам