是否可以将模拟函数调用中的一个参数保存为另一个参数?例如参数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
(更难)。
在线查看