2

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

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

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

4

3 回答 3

3

你在找这个吗?

Expect.Call(sqr.CanRender(null)).IgnoreArguments()
    .Do((Func<Shape, bool>) delegate(Agent x){return x.GetType() == typeof(Square);})
    .Repeat.Any();

编辑:答案在精神上是正确的,但原始语法并不完全有效。

于 2008-11-23T23:06:47.197 回答
2

如果您无法使用 .Net Framework 3.5(Cristian 的回答要求),因此无法访问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();
于 2009-03-04T10:35:26.700 回答
1

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

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

Look at this wiki article for more information.

于 2009-09-16T06:13:13.920 回答