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

旧版Google Test:MOCK_METHODn宏Mock char**参数函数报错求示例

旧版Google Test中char**参数的Mock实现示例

先看原接口类的定义(假设你的虚函数是这样的):

class MyInterface {
public:
    virtual ~MyInterface() = default;
    // 带char**参数的虚函数
    virtual int processData(char** input, int dataCount) = 0;
};

对应的Mock类实现(用旧版MOCK_METHODn宏):

#include <gmock/gmock.h>

class MockMyInterface : public MyInterface {
public:
    // 注意:MOCK_METHOD2对应参数数量为2的函数,格式是MOCK_METHODN(方法名, 返回类型, (参数类型列表))
    MOCK_METHOD2(processData, int, (char**, int));
};

关键注意点

  • 宏的数字后缀要和参数数量严格匹配:比如上面函数有2个参数,用MOCK_METHOD2;如果是1个参数用MOCK_METHOD1,以此类推。
  • 参数类型必须和原虚函数完全一致:如果原函数是const char**,Mock里也要写const char**,不能只写char**,否则会因为函数签名不匹配编译报错。
  • 如果原虚函数是const成员函数,要改用MOCK_METHODn_CONST宏,比如:
    // 原const虚函数
    virtual int processData(char** input, int dataCount) const = 0;
    
    // Mock写法
    MOCK_METHOD2_CONST(processData, int, (char**, int));
    

测试用例示例

TEST(MyInterfaceTest, ProcessDataReturnsExpectedValue) {
    MockMyInterface mockObj;
    char* testArr[] = {"test1", "test2"};
    char** testData = testArr;

    // 设置调用期望:当传入testData和2时,返回100
    EXPECT_CALL(mockObj, processData(testData, 2))
        .WillOnce(testing::Return(100));

    // 调用Mock方法验证
    int result = mockObj.processData(testData, 2);
    EXPECT_EQ(result, 100);
}

内容的提问来源于stack exchange,提问作者Gidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:10