【问题标题】:Google test save one argument into another argument谷歌测试将一个参数保存到另一个参数中
【发布时间】: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】:

    您可以通过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(更难)。

    See it online

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2013-11-10
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多