Gmock - 如何从输入参数设置模拟函数参数值?

时间:2017-07-22 21:09:30

标签: unit-testing googletest googlemock gmock

我在我的项目中使用Gmock。我有以下模拟功能。

  MOCK_METHOD2(helper,
     bool(const std::string&, std::string*));

目标是为所有模拟调用将参数1的值设置为参数2.

我做了以下事情。

  std::string temp;

  EXPECT_CALL(
        MockObj,
        helper(_,_))
        .WillRepeatedly(
          DoAll(SaveArg<0>(&temp), //Save first arg to temp
                SetArgPointee<1>(temp), //assign it to second arg
                Return(true)));

但是我看到参数2被设置为tmp的原始值而不是保存的值。有没有其他方法可以解决这个问题?我想使这个EXPECT_CALL动态而不是做SetArgPointee&lt; 1&gt;(“testval”)。

1 个答案:

答案 0 :(得分:0)

标准操作不支持您所需的操作。您需要编写自定义匹配器:

ACTION(AssignArg0ToArg1) {
  *arg1 = arg0;
}

然后您可以将其与Return(true)结合使用。有关自定义操作的详细信息,请访问https://github.com/google/googlemock/blob/master/googlemock/docs/DesignDoc.md