Реализация WillN в GoogleMock?

Есть ли более аккуратный и / или более короткий способ установить несколько идентичных действий, чем повторное использование WillOnce? Есть ли способ для WillRepeatedly иметь кардинальность, например?

Я могу только найти примеры этой цепи WillOnce потенциально сопровождается одним WillRepeatedlyчто не идеально для ситуаций, когда я могу захотеть вернуть значение в первый N раз, когда вызывается функция, а затем вернуть другое значение в последний раз, например, используя mock для представления obj в следующем примере и сделайте это N раз:

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

2

Решение

Ты можешь использовать 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, и вы получите сообщения, предупреждающие вас о том, что ожидание «перенасыщенного и активного» не выполняется.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]