Rhino Mocks: Как вернуть условный результат из метода фиктивного объекта
-
10-07-2019 - |
Вопрос
Я хотел бы сделать что-то вроде следующего, но не могу понять синтаксис для метода Do совершенно правильно.
var sqr = new _mocks.CreateRenderer<ShapeRenderer>();
Expect.Call(sqr.CanRender(null)).IgnoreArguments().Do(x =>x.GetType() == typeof(Square)).Repeat.Any();
Итак, я бы хотел настроить метод sqr.CanRender (), чтобы он возвращал значение true, если вход имеет тип Square и false в противном случае.
Решение
Вы ищете это?
Expect.Call(sqr.CanRender(null)).IgnoreArguments()
.Do((Func<Shape, bool>) delegate(Agent x){return x.GetType() == typeof(Square);})
.Repeat.Any();
РЕДАКТИРОВАТЬ: Ответ был правильным в духе, но оригинальный синтаксис не совсем работал. Р>
Другие советы
Если вы не можете использовать .Net Framework 3.5 (требуется для ответ Кристиана ) и поэтому не имеют доступа к System.Func делегатам, тогда вам нужно будет определить свой собственный делегат.
Добавить к участнику класса:
private delegate bool CanRenderDelegate(Shape shape)
Ожидание становится:
Expect.Call(sqr.CanRender(null))
.IgnoreArguments()
.Do((CanRenderDelegate) delegate(Agent x){return x.GetType() == typeof(Square);})
.Repeat.Any();
Начиная с версии Rhino Mocks 3.5 вы можете выполнять следующие действия:
Expect.Call( sqr.CanRender( Arg<Shape>.Is.TypeOf<Square>() ).Repeat.Any();
Посмотрите эту вики-статью для получения дополнительной информации.