Rhino Mocks:如何从模拟对象方法返回条件结果

时间:2008-11-23 22:07:01

标签: c# rhino-mocks anonymous-methods

我想做类似以下的事情,但似乎无法正确获取Do方法的语法。

var sqr = new _mocks.CreateRenderer<ShapeRenderer>();
Expect.Call(sqr.CanRender(null)).IgnoreArguments().Do(x =>x.GetType() == typeof(Square)).Repeat.Any();

基本上,我想设置sqr.CanRender()方法,如果输入的类型为Square,则返回true,否则返回false。

3 个答案:

答案 0 :(得分:3)

你在找这个吗?

Expect.Call(sqr.CanRender(null)).IgnoreArguments()
    .Do((Func<Shape, bool>) delegate(Agent x){return x.GetType() == typeof(Square);})
    .Repeat.Any();
编辑:答案是正确的,原始语法不太合适。

答案 1 :(得分:2)

如果您无法使用.Net Framework 3.5(Cristian's answer要求),因此无法访问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();

答案 2 :(得分:1)

从Rhino Mocks 3.5开始,您现在可以执行以下操作:

Expect.Call( sqr.CanRender( Arg<Shape>.Is.TypeOf<Square>() ).Repeat.Any();

请查看此wiki article以获取更多信息。