2009-10-22 44 views
5

我有一个类具有依赖性:如何在Rhino Mocks中存储Func <T,TResult>?

private readonly IWcfClient<ITestConnectionService> _connectionClient; 

,我想stub这个电话:

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

目前这是行不通的:

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

这是可能的在犀牛?

回答

3

使用自定义做委托,它需要在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; 
    }));; 
3

如果你不感兴趣的“测试”参数的精确值,可以使用Arg<>结构:

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