2009-10-22 62 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); 
相關問題