首页 > 解决方案 > 谷歌测试将一个参数保存到另一个参数中

问题描述

是否可以将模拟函数调用中的一个参数保存到另一个参数中?例如参数 1 到参数 4 中?

EXPECT_CALL(mock_, up_func(_, _, _, _)).
.WillOnce(DoAll(SaveArg<1>(Argument4), Return(LSUCCESS)));

标签: c++unit-testinggoogletest

解决方案


你可以这样做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的值的副本,而不是稍后设置的值。helperSaveArg

第三种选择是定义自定义操作,如果这是您将经常使用的操作。自定义操作可用于WithArgs选择参数(更简单的版本)或模板化以避免WithArgs每次(更难)。

在网上看到


推荐阅读