如何在 gmock 中将参数用作 return 值

How to use an argument as return value in gmock

我有以下电话:

EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
      .WillOnce(DoAll(SaveArg<2>(&bufferSize), Return(make_pair(Success, bufferSize))));

我正在尝试 return 作为第二个 _ 传递的任何值作为我在对中的第二个元素。这是最好的(或至少是正确的)方法吗?

此 bufferSize 变量已在测试中声明 class。

编辑:

换句话说:

假设我有以下内容:

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>));

你的方法是对的,你去匿名化了第三个参数中的值。在我看来,使用 lambda 或自定义操作是更可取的方式。存储的 lambda 或动作可以在其他期望中重复使用。

EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
  .WillOnce(WithArgs<0, 2>([](Type1 Success, Type2 bufferSize) {
    return make_pair(Success, bufferSize);
  }));

ACTION_P2(ReturnPair, Success, bufferSize) {
  return make_pair(Success, bufferSize);
}

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

更专业因此更不受欢迎

EXPECT_CALL(myMock, myFunction(someSpecifiedParameter, _, _))
  .WillOnce(WithArg<2>([](Type2 bufferSize) {
    return make_pair(someSpecifiedParameter, bufferSize);
  }));

ACTION_P(ReturnPair, bufferSize) {
  return make_pair(someSpecifiedParameter, bufferSize);
}

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