2

是否有比重复使用更简洁和/或更简洁的方法来设置多个相同的操作WillOnce?例如,有没有办法获得WillRepeatedly基数?

我只能找到链接WillOnce可能后跟单个 的示例WillRepeatedly,这对于我可能希望在调用函数的前 N ​​次返回值然后最后一次返回不同值的情况下不太理想,例如使用模拟在以下示例中表示 obj 并让它循环 N 次:

while (obj.IsDone())
{
    SomeAction(obj.NextItem());
}
4

1 回答 1

3

您可以使用Times.

// This is the final call
EXPECT_CALL(obj, IsDone())
  .WillOnce(Return(true));
// These are the intermediate calls
EXPECT_CALL(obj, IsDone())
  .Times(N)
  .WillRepeatedly(Return(false))
  .RetiresOnSaturation();

模拟对象的IsDone方法将在前N次被调用时返回 false。之后,最近的期望就会得到满足,所以我们用 指示它不再申请RetiresOnSaturation。后续调用IsDone将由第一个期望处理,使其返回 true。如果再次调用它,测试将失败。

如果省略RetiresOnSaturation,则第二个期望将继续适用;它将继续返回 false,并且您会收到消息提醒您“过度饱和和活跃”的期望正在失败。

于 2013-02-13T22:50:45.170 回答