旧版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
相关产品推荐
相关产品推荐

