You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:15:06