Google 测试将一个参数保存到另一个参数
Google test save one argument into another argument
是否可以将模拟函数调用中的一个参数保存到另一个参数中?例如参数 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
到 select 参数一起使用(更简单的版本)或模板化以避免每次都 WithArgs
(更难)。
是否可以将模拟函数调用中的一个参数保存到另一个参数中?例如参数 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
到 select 参数一起使用(更简单的版本)或模板化以避免每次都 WithArgs
(更难)。