Rhino Mocks: Как вернуть условный результат из метода фиктивного объекта

StackOverflow https://stackoverflow.com/questions/313030

Вопрос

Я хотел бы сделать что-то вроде следующего, но не могу понять синтаксис для метода 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();

Посмотрите эту вики-статью для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top