C++ Google Mock单元测试报错ISInfo无gmock_registerCallBack成员
报错原因
EXPECT_CALL 是Google Mock提供的宏,它要求传入的对象必须是Mock类的实例类型:你当前将MockMSInfo实例赋值给了父类ISInfo类型的指针isInfo,isInfo的静态类型是ISInfo,而GMock为Mock类自动生成的gmock_registerCallBack这类Mock相关的成员函数,只存在于MockMSInfo类的定义中,父类ISInfo没有对应成员,因此编译器抛出找不到成员的错误。
另外你写的MockMSInfo构造函数存在笔误:初始化列表里的MSInfo(ode)应为MSInfo(node),否则也会触发未定义标识符的编译错误。
解决方案
你可以从两种方案里选一种适配你的代码:
- 方案1:分开存储Mock类指针和接口指针
专门用MockMSInfo类型的指针设置调用期望,ISInfo类型的指针只传给被测试的业务代码使用,示例代码如下:Node *node = new Node(); // 单独存Mock指针用来设置期望 MockMSInfo* mockInfo = new MockMSInfo(node); // 接口指针传给业务代码调用 ISInfo *isInfo = mockInfo; // 设期望时用Mock指针 EXPECT_CALL(*mockInfo, registerCallBack(_)); - 方案2:对ISInfo指针做向下转型
如果你确定当前ISInfo指针指向的就是MockMSInfo实例,可以在设置期望时手动做向下转型:EXPECT_CALL(*static_cast<MockMSInfo*>(isInfo), registerCallBack(_));
内容的提问来源于stack exchange,提问作者liv2hak
相关产品推荐
相关产品推荐

