首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MFC匹配器和GoogleMock CString

MFC匹配器和GoogleMock CString
EN

Stack Overflow用户
提问于 2009-10-19 18:20:27
回答 2查看 1.7K关注 0票数 1

我在Google Group上问了这个问题,但我想我会在这里得到更快的回应。

我正在尝试使用Google's Mocking framework来测试我的代码。我也在利用他们的test framework。我正在用VC9编译。我在匹配MFC\ATL CStrings的参数时遇到问题。GMock说对象不相等,似乎是在指针地址上求值。我试图模拟的方法的结构如下:

代码语言:javascript
复制
void myMethod(const CString & key, const CString & value);

因此:

代码语言:javascript
复制
MOCK_METHOD2(myMethod, void(const CString & key , const CString &
value);

在设置我的期望值时,我做了以下比较:

代码语言:javascript
复制
CString szKey = _T("Some key");
CString szValue = _T("Some value");

EXPECT_CALL(myMock, myMethod(Eq(szKey), Eq(szValue))).WillOnce(Return
(true));

我尝试了许多不同的匹配器组合,例如:

代码语言:javascript
复制
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尝试了以下两个期望,但都不匹配:

代码语言:javascript
复制
: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

亚当

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-19 18:34:54

既然在将字符串传递给您的方法时不会复制它们,那么您真的需要检查它们的值吗?它应该足以写出以下期望:

代码语言:javascript
复制
CString szKey = _T("Some key");
CString szValue = _T("Some value");

EXPECT_CALL(myMock, myMethod(szKey, szValue)).WillOnce(Return(true));

..。它将检查提供给mock方法的字符串是否确实是您期望的字符串(通过地址验证),而不是副本或其他字符串。

关于预定义的匹配器不能与CString一起工作的原因,我怀疑这要么是因为CString没有覆盖operator()==,要么是因为匹配器实现没有明确的CString专门化。

票数 0
EN

Stack Overflow用户

发布于 2009-10-19 19:31:05

结果是一个不同的错误。叹息它实际上是在捕捉一个bug....Google Mock可以很好地与CStrings进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1590270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档