【问题标题】:How do I stub a Func<T,TResult> in Rhino Mocks?如何在 Rhino Mocks 中存根 Func<T,TResult>?
【发布时间】:2009-10-22 01:17:07
【问题描述】:

我有一个有依赖关系的类:

private readonly IWcfClient<ITestConnectionService> _connectionClient;

我想终止这个电话:

_connectionClient.RemoteCall(client => client.Execute("test"));

这目前不起作用:

_connectionService
    .Stub(c => c.RemoteCall(rc => rc.Execute("test")))
    .Return(true);

这在 Rhino 中可行吗?

【问题讨论】:

    标签: c# rhino-mocks


    【解决方案1】:

    使用一个自定义的 Do 委托来接受 func 并对其进行测试。您可以通过将其转换为表达式并解析表达式树来做到这一点,或者仅使用模拟输入运行委托并测试结果。

    如果 RemoteCall() 中的 lambda 不包含 x=>x.Execute("test") ,则以下内容将引发错误 - 您可以根据这个想法来使其完全按照您的意愿行事。

    public interface IExecute {
      void Execute(string input)
    }
    _connectionService
        .Stub(c => c.RemoteCall(null)).IgnoreArguments()
        .Do(new Func<Action<IExecute>,bool>( func => {
           var stub = MockRepository.GenerateStub<IExecute>();
           func(stub);
           stub.AssertWasCalled(x => x.Execute("test"));
           return true;
         }));;
    

    【讨论】:

      【解决方案2】:

      如果您对“test”参数的确切值不感兴趣,可以使用Arg&lt;&gt; 构造:

      _connectionService.Stub(c => c.RemoteCall( Arg<Func<string, bool>>.Is.NotNull ))
                        .Return(true);
      

      【讨论】:

        猜你喜欢
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        相关资源
        最近更新 更多