Gtest:如何根据expect_call中每次增加的数字返回不同的字符串值?

时间:2017-06-15 22:11:19

标签: c++ googletest gmock

const std::wstring tesName[3] = { L"Final", L"Partial", L"Best"};

我的gtest将调用函数GetName()数百次。 所以我希望GetName()的模拟函数能够像这样返回:

int i = 0;
EXPECT_CALL(*my_mock, GetName()).Times(AtLeast(1)).WillRepeatedly(Return(tesName[(i++)%3]));

它始终可以将名称从数组tesName返回FinalPartial再到Best,然后再从Final开始。但上面的代码不起作用。我怎么能这样做?

无论我是本地变量还是我的gtest类的成员变量,上面的代码都不起作用。

在gmock文件中:

using testing::ReturnPointee;
...
 int x = 0;
MockFoo foo;
EXPECT_CALL(foo, GetValue())
  .WillRepeatedly(ReturnPointee(&x));  // Note the & here.
x = 42;
EXPECT_EQ(42, foo.GetValue());  // This will succeed now.

但我不知道如何将它应用到我的案例中。

1 个答案:

答案 0 :(得分:0)

如果您事先知道应该调用该方法的次数n,您可以执行以下操作:

{
  InSequence s;

  for (int i = 0; i < n; i++) {
    EXPECT_CALL(*my_mock, GetName())
        .WillOnce(Return(tesName[i % 3]))
        .RetiresOnSaturation();
  }
}