我还询问了谷歌集团这个问题,但我想我会得到这里更快的响应。

我试图使用谷歌的嘲讽框架来测试我的代码。我还利用自己的测试框架为好。我在编译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就好了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top