我在Google Group上问了这个问题,但我想我会在这里得到更快的回应。
我正在尝试使用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));上面的任何一个调用都产生了相同的结果。还有其他人遇到过这个问题吗?
这是输出:
Google Mock尝试了以下两个期望,但都不匹配:
: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亚当
发布于 2009-10-19 18:34:54
既然在将字符串传递给您的方法时不会复制它们,那么您真的需要检查它们的值吗?它应该足以写出以下期望:
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));..。它将检查提供给mock方法的字符串是否确实是您期望的字符串(通过地址验证),而不是副本或其他字符串。
关于预定义的匹配器不能与CString一起工作的原因,我怀疑这要么是因为CString没有覆盖operator()==,要么是因为匹配器实现没有明确的CString专门化。
发布于 2009-10-19 19:31:05
结果是一个不同的错误。叹息它实际上是在捕捉一个bug....Google Mock可以很好地与CStrings进行比较。
https://stackoverflow.com/questions/1590270
复制相似问题