c++ - 谷歌测试将一个参数保存到另一个参数中
问题描述
是否可以将模拟函数调用中的一个参数保存到另一个参数中?例如参数 1 到参数 4 中?
EXPECT_CALL(mock_, up_func(_, _, _, _)).
.WillOnce(DoAll(SaveArg<1>(Argument4), Return(LSUCCESS)));
解决方案
你可以这样做Invoke
EXPECT_CALL(mock_, up_func(_, _, _, _))
.WillOnce(
WithArgs<0, 3>(
Invoke([](auto in, auto& out){out = in; return LSUCCESS;})
)
);
或使用辅助变量
int helper;
EXPECT_CALL(mock_, up_func(_, _, _, _))
.WillOnce(
DoAll(
SaveArg<0>(&helper),
SetArgReferee<3>(ByRef(helper)),
Return(0)
)
);
注意:很重要,否则您将获得从设置期望那一刻起ByRef
的值的副本,而不是稍后设置的值。helper
SaveArg
第三种选择是定义自定义操作,如果这是您将经常使用的操作。自定义操作可用于WithArgs
选择参数(更简单的版本)或模板化以避免WithArgs
每次(更难)。
推荐阅读
- android - HMS Map Kit 不渲染?
- amazon-web-services - 如何对目录中的模板进行 cloudformation 验证?
- docker - 在启动 docker 之前从文件中读取环境变量
- business-objects - 数字排序在交叉表中给出随机顺序
- sql - 仅当小数点前的数字为 0 时才查找查询四舍五入的小数位
- spring-boot - 当通过弹簧插入记录时,CockroachDB 正在生成大 ID
- phonegap - 无法在新版 Play 管理中心无故上传 APK
- flutter - 这个 Flutter 构造函数调用是如何工作的?
- android - AndroidTV Leanback 库默认导航缩放使矢量可绘制边缘出现划痕、锯齿状、难看
- testing - 如何在 Ember 2.16 中启用数据测试属性并将其传递给组件?