2009-11-12 14 views
36

मैं RhinoMocks उपयोग कर रहा हूँ रिटर्न जो रुकावट, मैं एक विधि ठूंठ की जरूरत है, और हमेशा यह तीसरी पैरामीटर लौट गए हैं, क्या में पारित हो जाता है की परवाह किए बिना: जाहिर हैRhinoMocks - एक विधि एक पैरामीटर

_service.Stub(x => x.Method(parm1, parm2, parm3)).Return(parm3); 

, यह इतना आसान नहीं है। मैं हमेशा नहीं जानता कि पैरा क्या होने जा रहे हैं, लेकिन मुझे पता है कि मैं हमेशा तीसरे को वापस करना चाहता हूं।

+0

मुझे यकीन है कि अगर यह संभव हो सकता है नहीं कर रहा हूँ। क्या आप जिस विधि को जांचने का प्रयास कर रहे हैं उसे पोस्ट कर सकते हैं? –

+0

विधि एक स्थिर वर्ग से दूसरी विधि को कॉल देता है। मूल रूप से यह कॉल डेटाबेस में दिखता है कि यह देखने के लिए कि पहला पैरामीटर मौजूद है या नहीं, यदि यह नहीं है, तो यह तीसरा पैरामीटर देता है। – Martin

+0

यह मक –

उत्तर

65

आप Do() handler के साथ एक विधि के लिए एक कार्यान्वयन प्रदान कर सकते हैं: TypeZ दो बार प्रकट होता है

Func<TypeX,TypeY,TypeZ,TypeZ> returnThird = (x,y,z) => z; 
mock.Expect(x => x.Method(null, null, null)).IgnoreArguments().Do(returnThird); 

ध्यान दें कि क्योंकि यह दोनों एक इनपुट तर्क के प्रकार और वापसी प्रकार है।

+2

विस्मयकारी के साथ केक का एक टुकड़ा है, यह पूरी तरह से काम करता है। – Martin

+1

यह प्रश्न में '.Stub() 'के बजाय 'Expect()' का उपयोग कर रहा है। – ANeves

0

आप कॉलबैक के साथ अपेक्षित विधि का उपयोग उस मूल्य को वापस करने के लिए कर सकते हैं जिसके बाद आप हैं। निम्नलिखित शून्य वापस आ जाएगा।

_service.Expect(o => o.Method(null, null, null)) 
     .Callback((object parm1, object parm2, object parm3) => { return parm3; }); 

मुझे यकीन नहीं है कि क्या आप स्टब पर कॉलबैक का उपयोग कर सकते हैं।

6

यह मेरे लिए काम किया:

 _service 
      .Stub(x => x.Method(Arg<string>.Is.Anything, ...)) 
      .Return(null) // ... or default(T): will be ignored but RhinoMock requires it 
      .WhenCalled(x => 
      { 
       // This will be used as the return value 
       x.ReturnValue = (string) x.Arguments[0]; 
      }); 
संबंधित मुद्दे