Google test保存一个参数到另一个参数



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

在线查看

最新更新