gmock中能否不使用testing::Invoke返回修改后的输入参数?
gmock不使用Invoke返回入参运算值的实现方法
分两种常见场景处理:
- 如果你和示例代码一样,已经在
EXPECT_CALL里固定匹配第一个参数为确定值(比如method(5)约束第一个入参必须是5),不需要动态获取运行时参数,直接写死计算后的返回值即可,逻辑最简单也最可靠:
// 匹配条件已经保证触发时第一个参数必然是5,直接返回5*2=10即可 EXPECT_CALL(*mock, method(5)).WillOnce(Return(10));
这种写法完全不涉及testing::Invoke,也没有任何额外运行时开销。
- 如果你需要匹配任意/符合规则的参数(比如用
_匹配任意入参),动态拿到实际传入的第一个参数做乘2运算后返回,又不想显式调用testing::Invoke,可以用gmock内置的ACTION宏自定义专用动作,不需要手写Invoke转发逻辑:
// 自定义返回第一个参数2倍的动作,arg0是ACTION宏默认提供的第一个入参占位符 ACTION(ReturnDoubleArg0) { return arg0 * 2; } // 直接在期望中使用自定义动作即可 EXPECT_CALL(*mock, method(_)).WillOnce(ReturnDoubleArg0());
说明:
ACTION宏会自动为你生成动作类实现,宏内可以直接通过arg0、arg1...argN按顺序访问被mock方法的传入参数,不需要额外做参数绑定。
内容的提问来源于stack exchange,提问作者IzZy
相关产品推荐
相关产品推荐

