首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在gmock中使用参数作为返回值

如何在gmock中使用参数作为返回值
EN

Stack Overflow用户
提问于 2022-05-20 13:40:29
回答 1查看 85关注 0票数 1

我有以下电话:

代码语言:javascript
运行
复制
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
      .WillOnce(DoAll(SaveArg<2>(&bufferSize), Return(make_pair(Success, bufferSize))));

我试图返回作为第二个_传递的值,作为对中的第二个元素。这是最好的(或者至少是正确的)方式吗?

这个bufferSize变量是在测试类中声明的。

编辑:

换句话说:

假设我有以下内容:

代码语言:javascript
运行
复制
class object{
    pair<int, int> f(int x);
}

object obj;
constexpr int fixedValue = 5;
EXPECT_CALL(obj, f(_)).WillOnce(
                       Return(make_pair(fixedValue, <PARAMETER PASSED TO F>));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-20 15:58:14

您的方法是正确的,您将第三个参数中的值匿名化。在我看来,使用lambda或自定义操作是更好的方法。存储的lambda或操作可以在其他期望中重用。

代码语言:javascript
运行
复制
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
  .WillOnce(WithArgs<0, 2>([](Type1 Success, Type2 bufferSize) {
    return make_pair(Success, bufferSize);
  }));

代码语言:javascript
运行
复制
ACTION_P2(ReturnPair, Success, bufferSize) {
  return make_pair(Success, bufferSize);
}

EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
  .WillOnce(WithArgs<0, 2>(ReturnPair));

更专业,所以更不可取

代码语言:javascript
运行
复制
EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
  .WillOnce(WithArg<2>([](Type2 bufferSize) {
    return make_pair(someSpecifiedParameter, bufferSize);
  }));

代码语言:javascript
运行
复制
ACTION_P(ReturnPair, bufferSize) {
  return make_pair(someSpecifiedParameter, bufferSize);
}

EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
  .WillOnce(WithArg<2>(ReturnPair));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72319906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档