【问题标题】:Rhino Mocks: How to return conditional result from a mock object methodRhino Mocks:如何从模拟对象方法返回条件结果
【发布时间】:2008-11-23 22:07:00
【问题描述】:

我想做以下类似的事情,但似乎无法完全正确地获得 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。

【问题讨论】:

    标签: c# rhino-mocks anonymous-methods


    【解决方案1】:

    你在找这个吗?

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

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

    【讨论】:

      【解决方案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();
      

      【讨论】:

        【解决方案3】:

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

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

        查看此wiki article 了解更多信息。

        【讨论】:

        • 这很酷,不知道 Arg 静态类。我认为它也适用于 sqr.Expect(x=>...) 语法?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 1970-01-01
        相关资源
        最近更新 更多