是否有比重复使用更简洁和/或更简洁的方法来设置多个相同的操作WillOnce
?例如,有没有办法获得WillRepeatedly
基数?
我只能找到链接WillOnce
可能后跟单个 的示例WillRepeatedly
,这对于我可能希望在调用函数的前 N 次返回值然后最后一次返回不同值的情况下不太理想,例如使用模拟在以下示例中表示 obj 并让它循环 N 次:
while (obj.IsDone())
{
SomeAction(obj.NextItem());
}
是否有比重复使用更简洁和/或更简洁的方法来设置多个相同的操作WillOnce
?例如,有没有办法获得WillRepeatedly
基数?
我只能找到链接WillOnce
可能后跟单个 的示例WillRepeatedly
,这对于我可能希望在调用函数的前 N 次返回值然后最后一次返回不同值的情况下不太理想,例如使用模拟在以下示例中表示 obj 并让它循环 N 次:
while (obj.IsDone())
{
SomeAction(obj.NextItem());
}
您可以使用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,并且您会收到消息提醒您“过度饱和和活跃”的期望正在失败。