Есть ли более аккуратный и / или более короткий способ установить несколько идентичных действий, чем повторное использование WillOnce
? Есть ли способ для WillRepeatedly
иметь кардинальность, например?
Я могу только найти примеры этой цепи WillOnce
потенциально сопровождается одним WillRepeatedly
что не идеально для ситуаций, когда я могу захотеть вернуть значение в первый N раз, когда вызывается функция, а затем вернуть другое значение в последний раз, например, используя mock для представления 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
метод вернет false первым N раз это называется. После этого самое последнее ожидание будет удовлетворено, поэтому мы просим его больше не применять, используя RetiresOnSaturation
. Последующие звонки IsDone
будет обработано первым ожиданием, в результате чего оно вернет true. Если он вызывается еще раз, тест не пройден.
Если вы опустите RetiresOnSaturation
тогда второе ожидание продолжит применяться; он продолжит возвращать значение false, и вы получите сообщения, предупреждающие вас о том, что ожидание «перенасыщенного и активного» не выполняется.
Других решений пока нет …