2010-08-19 8 views
20

मेरे पास एक ऐसा फ़ंक्शन है जो मैं मजाक कर रहा हूं जो एक पैरामीटर के रूप में तर्क वस्तु लेता है। मैं ऑब्जेक्ट में मानों के आधार पर परिणाम वापस करना चाहता हूं। मैं वस्तुओं की तुलना नहीं कर सकता क्योंकि बराबर अतिसंवेदनशील नहीं है।राइनो मोक्स - Arg.Matchches का उपयोग

मैं निम्नलिखित कोड है:

_tourDal.Stub(x => x.GetById(Arg<TourGet>.Matches(y => y.TourId == 2), null)).Return(
       new Tour() 
       { 
        TourId = 2, 
        DepartureLocation = new IataInfo() { IataId = 2 }, 
        ArrivalLocation = new IataInfo() { IataId = 3 } 
       }); 

जब आपूर्ति पैरामीटर 2.

यह लगता है कि यह काम करना चाहिए की एक TourId है इस वस्तु निर्दिष्ट लौटना चाहिए, लेकिन जब मैं इसे चलाने,

Arg उपयोग करते समय, सभी तर्कों Arg.Is, Arg.Text, Arg.List, Arg.Ref या Arg.Out का उपयोग कर परिभाषित किया जाना चाहिए: मैं निम्न अपवाद मिलता है। 2 तर्क अपेक्षित, 1 परिभाषित किया गया है।

कोई भी विचार जो मुझे हल करने के लिए करना है?

उत्तर

24

आप अपने दूसरे शून्य तर्क के लिए एक ही वाक्य विन्यास का उपयोग करने की आवश्यकता है, इन पंक्तियों के साथ कुछ (मैं इसे परीक्षण नहीं किया):

_tourDal.Stub(x => x.GetById(Arg<TourGet>.Matches(y => y.TourId == 2), Arg<TypeName>.Is.Null)).Return(
      new Tour() 
      { 
       TourId = 2, 
       DepartureLocation = new IataInfo() { IataId = 2 }, 
       ArrivalLocation = new IataInfo() { IataId = 3 } 
      }); 
+7

सही जवाब है कि। मुझे पता है, मैंने यह त्रुटि संदेश लिखा है ... –

6

हल:

 _tourDal.Stub(x => x.GetById(new TourGet(2), null)) 
      .Constraints(new PredicateConstraint<TourGet>(y => y.TourId == 2), new Anything()) 
      .Return(
      new Tour() 
      { 
       TourId = 2, 
       DepartureLocation = new IataInfo() { IataId = 2 }, 
       ArrivalLocation = new IataInfo() { IataId = 3 } 
      }); 
+3

यदि आप बाद में बाधाओं को कॉल करते हैं तो आपको स्टब में किसी भी तर्क को पारित नहीं करना चाहिए, क्योंकि तर्कों को अनदेखा किया जाता है लेकिन पाठक को भ्रमित कर रहे हैं। –

+0

यह वास्तव में मेरे लिए काम किया, धन्यवाद। – ShahidAzim