2011-12-01 11 views
33

मैं कुछ इस तरह लिखने के लिए कोशिश कर रहा हूँ:राइनो मोक्स तर्क प्राप्त करते हैं, इसे संशोधित करते हैं और लौटते हैं?

myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; }); 

मैं वास्तविक उद्देश्य यह है कि, नकली इसे संशोधित और वापस लौटने के लिए पारित कर दिया प्राप्त करना चाहते हैं।

क्या यह परिदृश्य राइनो मोक्स के साथ संभव है?

उत्तर

82

आप WhenCalled विधि इस तरह इस्तेमाल कर सकते हैं:

myStub 
    .Stub(_ => _.Create(Arg<Invoice>.Is.Anything)) 
    .Return(null) // will be ignored but still the API requires it 
    .WhenCalled(_ => 
    { 
     var invoice = (Invoice)_.Arguments[0]; 
     invoice.Id = 100; 
     _.ReturnValue = invoice; 
    }); 

और उसके बाद आप इस तरह के रूप में अपने ठूंठ बना सकते हैं:

Invoice invoice = new Invoice { Id = 5 }; 
Invoice result = myStub.Create(invoice); 
// at this stage result = invoice and invoice.Id = 100 
+1

आप कॉल लौटने के लिए() IgnoreArguments जोड़कर से बच सकते हैं() अंत में मुझे लगता है। – samjudson

+2

@ सैमजुडसन: राइनो अभी भी इग्नोर आर्टमेंट्स के साथ रिटर्न के बिना अपवाद फेंकता है, इसलिए वापसी की आवश्यकता है। –

संबंधित मुद्दे