Я знаю, что могу это сделать:Rhino Mocks: переназначить новый результат для метода на заглушке
IDateTimeFactory dtf = MockRepository.GenerateStub<IDateTimeFactory>();
dtf.Now = new DateTime();
DoStuff(dtf); // dtf.Now can be called arbitrary number of times, will always return the same value
dtf.Now = new DateTime()+new TimeSpan(0,1,0); // 1 minute later
DoStuff(dtf); //ditto from above
Что делать, если вместо того, чтобы IDateTimeFactory.Now является свойство это метод IDateTimeFactory .GetNow(), как я могу сделать то же самое?
По предложению Иуды ниже я переписал мой SetDateTime вспомогательный метод следующим образом:
private void SetDateTime(DateTime dt) {
Expect.Call(_now_factory.GetNow()).Repeat.Any();
LastCall.Do((Func<DateTime>)delegate() { return dt; });
}
, но он по-прежнему бросает «Результат для ICurrentDateTimeFactory.GetNow(); уже настроен.» ошибки.
Плюс его еще не будет работать с заглушкой ....
Спасибо за вашу помощь Judah –
Рад, что это работает для вас! FWIW, я отправил по электронной почте Айенде об этом сообщении. У него может быть лучший ответ для вас, чем я. –
Джордж, Айенде посмотрел на эти ответы. Он сказал, что мы можем использовать закрытие и использовать SetupResult.For вместо Expect.Call (...). Repeat.Any(). В противном случае он не возражал против этих ответов. –