ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c – GTest和GoogleMock EXPECT_CALL在Windows中失败,使用char * param在Mac上传递

2019-08-23 05:06:44  阅读:626  来源: 互联网

标签:c macos windows googletest gmock


我在我继承的项目中进行了测试,看起来与此类似

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之后,调用一个方法栏,它将原始字符串值作为参数,然后在方法中调用foo,并使用从原始字符串值构建的缓冲区.

此测试正在处理此项目的Mac版本,但在Windows版本上失败.它似乎是比较两个char指针的指针地址,预期和实际,然后因为它们不同而失败.方法foo肯定在bar内调用.

如果此测试方法(EXPECT_CALL)比较指针地址而不是该指针处的数据,那么Mac上的测试也不应该失败吗?

有人在使用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, foo(_,_,buffer,buffer.size(),_)...
  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, foo(_,_,buffer, buffer.size(), _)...
     Expected: to be called once

我修改此错误只是为了反映我的例子.

预先感谢您的帮助.

解决方法:

Mac和Mac之间似乎没有任何明显的差异.关于EXPECT_CALL的Windows.我想在字符串实现和编译器如何处理常量字符串之间可能存在差异,这可以解释行为的差异.

但是,我希望指针参数可以通过地址比较来匹配.要比较值,您应该使用特定的Matchers.特别是对于您的情况,有多种String Matchers可供选择,包括字符串相等的StrEq,您可以将其用作:

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

标签:c,macos,windows,googletest,gmock
来源: https://codeday.me/bug/20190823/1695509.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有