我在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