如何在Rhino Mocks中存根Func <t,tresult>?</t,tresult>

时间:2009-10-22 01:17:07

标签: c# rhino-mocks

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

private readonly IWcfClient<ITestConnectionService> _connectionClient;

我想要发出这个电话:

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

目前无效:

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

这在Rhino中是否可行?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

使用接受func并测试它的自定义Do委托。您可以通过将其转换为表达式并解析表达式树来执行此操作,或者仅使用模拟输入运行委托并测试结果。

如果RemoteCall()中的lambda不包含x =&gt; x.Execute(“test”),则以下内容将抛出错误 - 您可以根据想法使其完全按照您的意愿执行操作。< / p>

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;
     }));;