【发布时间】:2021-10-02 09:19:27
【问题描述】:
是否可以将模拟函数调用中的一个参数保存到另一个参数中?例如参数 1 到参数 4 中?
EXPECT_CALL(mock_, up_func(_, _, _, _)).
.WillOnce(DoAll(SaveArg<1>(Argument4), Return(LSUCCESS)));
【问题讨论】:
标签: c++ unit-testing googletest
是否可以将模拟函数调用中的一个参数保存到另一个参数中?例如参数 1 到参数 4 中?
EXPECT_CALL(mock_, up_func(_, _, _, _)).
.WillOnce(DoAll(SaveArg<1>(Argument4), Return(LSUCCESS)));
【问题讨论】:
标签: c++ unit-testing googletest
您可以通过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(更难)。
【讨论】: