2009-10-22 6 views
5

मैं एक निर्भरता के साथ एक वर्ग है:मैं राइनो मोक्स में एक Func <T,TResult> कैसे लगा सकता हूं?

private readonly IWcfClient<ITestConnectionService> _connectionClient; 

और मैं इस कॉल बाहर ठूंठ हैं: काम नहीं कर रहा

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

यह वर्तमान में:

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

यह संभव है राइनो में?

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

उत्तर

3

एक कस्टम प्रतिनिधि है कि समारोह में ले जाता है क्या का प्रयोग करें और परीक्षण है कि:

3

आप "परीक्षण" पैरामीटर का सही मूल्य में कोई दिलचस्पी नहीं कर रहे हैं, तो आप Arg<> निर्माण का उपयोग कर सकते हैं। आप इसे अभिव्यक्ति में परिवर्तित करके और अभिव्यक्ति वृक्ष को पार्स करके इसे कर सकते हैं, या सिर्फ एक नकली इनपुट के साथ प्रतिनिधि को चला सकते हैं और परिणामों का परीक्षण कर सकते हैं।

निम्नलिखित में एक त्रुटि फेंक दी जाएगी यदि रिमोटकॉल() में लैम्ब्डा 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; 
    }));;