GoogleMock - 匹配器和MFC \ ATL的CString
-
22-09-2019 - |
题
我还询问了谷歌集团这个问题,但我想我会得到这里更快的响应。
我试图使用谷歌的嘲讽框架来测试我的代码。我还利用自己的测试框架为好。我在编译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
亚当
解决方案
既然你时,他们传递给你的方法都赚不到的字符串复制了一份,你真的需要检查他们的价值观?它应该足以写入以下期望:
CString szKey = _T("Some key");
CString szValue = _T("Some value");
EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));
...这将检查给予模拟方法的字符串确实是你所期望的那些(由地址验证),而不是一个副本或其他字符串。
至于为什么预罐装的匹配不与CString
工作,我怀疑这可能是因为CString
不会覆盖operator()==
或匹配实现不具备CString
明确的分工。
其他提示
结束了一个不同的错误。 叹息的它实际上是抓住一个bug ....谷歌嘲弄可以比较CStrings就好了。
不隶属于 StackOverflow