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(更难)。

See it online