Google Test中能否将mock函数调用的一个参数保存到另一参数中
gmock保存函数参数到指定位置的问题解答
可以实现,你给出的写法本身就是Google Mock(gmock)的标准合法用法。
核心用法说明
- gmock内置的
SaveArg<参数索引>(目标地址)动作,功能就是当mock函数被调用时,自动将对应位置的参数值写入目标地址指向的变量中。 - 注意:gmock的参数索引从0开始计数,函数第一个入参对应索引
0,第二个对应索引1,第四个对应索引3。 - 你给出的示例中
SaveArg<1>(Argument4)的作用,就是把up_func被调用时的第二个入参(索引1)的值保存到Argument4指向的变量中,完全符合参数保存的需求。
常见场景写法参考
如果你需要把函数第一个参数(索引0)的值直接写入第四个参数(索引3,通常为输出型指针参数)指向的内存,可参考以下写法:
EXPECT_CALL(mock_, up_func(_, _, _, _)) .WillOnce(DoAll( SaveArg<0>(Arg<3>()), // 将第1个参数的值存入第4个参数指向的内存 Return(LSUCCESS) ));
如果需要先保存到本地变量后续做断言验证,可参考以下写法:
// 变量类型要和待保存的参数类型完全匹配 int saved_first_arg; EXPECT_CALL(mock_, up_func(_, _, _, _)) .WillOnce(DoAll( SaveArg<0>(&saved_first_arg), // 将第1个参数值存到本地变量 Return(LSUCCESS) ));
注意:如果是直接给mock函数的另一个入参指向的地址赋值,请确保该入参是合法可写的指针/引用类型,避免出现内存访问异常。
内容的提问来源于stack exchange,提问作者Calvin1241241
相关产品推荐
相关产品推荐

