微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GTest和GoogleMock EXPECT_CALL在Windows中失败,在Mac上传递char *参数

我在一个我inheritance的项目中有一个testing,看起来类似于这个

std::string value("test string"); const char * buffer = value.c_str(); EXPECT_CALL(object,foo(_,_,buffer,buffer.size(),_)).WillOnce(Return(0)); bar(value);

缓冲区是一个char *,指向一串数据。 我已经插入了像对象一样的虚拟值,只关注似乎在使用EXPECT_CALL的问题。 在这个EXPECT_CALL之后,调用一个方法栏,它将原始string值作为参数,然后在方法调用带有从原始string值构build的缓冲区的foo。

此testing正在使用此项目的Mac版本,但在Windows版本上失败。 它似乎是比较两个字符指针的指针地址,预期和实际,然后失败,因为它们是不同的。 foo的方法绝对是在bar内调用的。

如果这个testing方法(EXPECT_CALL)比较指针地址而不是指针处的数据,那么testing在Mac上也不应该失败?

无法使用for循环创build多个线程

gsoap wsdl2h在wcf wsdl文件上失败

消费者生产者代码未公开错误的Linuxdebugging

指向共享内存段

接收到SIGSEGV信号后的处理行为?

是否有人熟悉使用EXPECT_CALL和指针时,Mac和Windows之间的明显区别?

错误我看到

unkNown file: error: Unexpected mock function call - returning default value. Function call: foo(NULL,1,0000000001CAAE78 pointing to "test string",11,_) Returns: 0 Google Mock tried the following 1 expectation,but it didn't match: test.cpp(235): EXPECT_CALL(object,_)... Expected arg #2: is equal to 0000000001CAAF78 pointing to "test string" Actual: 0000000001CAAE78 pointing to "test string" Expected: to be called once Actual: never called - unsatisfied and active test.cpp(235): error: Actual function call count doesn't match EXPECT_CALL(object,_)... Expected: to be called once

修改这个错误只是为了反映我的例子。

预先感谢您的帮助。

如何启动具有特定访问权限的subprocess?

通过线程提高磁盘读取性能(多个文件

boost :: interprocess_mutex vs Win32 native mutexes的性能是什么?

调用一个不同的程序并传递参数

我想写一个函数来检索一个网页

Mac和Windows之间在EXPECT_CALL方面似乎没有任何明显的区别。 我想在string实现和编译器如何处理常量字符串之间也可能存在差异,这可以解释行为上的差异。

不过,我希望指针参数通过地址比较进行匹配。 要比较值,你应该使用特定的匹配器 。 特别是对于你的情况,有各种各样的字符串匹配器可供选择,包括用于字符串相等的StrEq ,你可以用它作为:

EXPECT_CALL(object,testing::StrEq(buffer),value.size(),_)) .WillOnce(Return(0));

这在Windows中的原因是因为MSVC实现字符串池( /GF )。 看这里:

http://msdn.microsoft.com/en-us/library/s0s0asdt.aspx

那么为什么这会使它工作? 因为gmock正在比较指针地址,当你有两个相同的常量字符串时,字符串池会使它们具有相同的值。 关闭这个编译器选项,看它失败。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐