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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 13:45:02