2011-09-13 3 views
10

के लिए मोक का उपयोग करने की कोशिश कर रहा है, मैं यह देखने की कोशिश कर रहा हूं कि मोक कुछ ऐसा है जो मैं एक नई परियोजना में उपयोग करना चाहता हूं क्योंकि मैंने जो अन्य मॉकिंग फ्रेमवर्क का उपयोग किया है, वह आईएमएचओ को चुनौती दे रहा है। तो उदाहरण के लिए, मैं इस तरह के रूप में एक विधि है:न्यूबी ने गणितीय विधि

IEnumerable<PickList> GetPickLists(); 

मुझे यकीन है कि कैसे मैं इस उपहास करने के लिए ... मैं कोशिश की है कुछ इस तरह माना जाता रहा हूँ नहीं कर रहा हूँ, लेकिन मैं compliation त्रुटियों हो रही है (मैं निम्नलिखित रिटर्न्स() सही नहीं है पता है, लेकिन समझ नहीं क्या रिटर्न शरीर में डाल करने के लिए:

var mockCrm = new Mock<ICrmProvider>(); 
mockCrm.Setup<IEnumerable<PickList>>(foo => foo.GetPickLists()) 
       .Returns<IEnumerable<PickList>>({}); 
इसके अलावा

, इन दोनों तरीकों की तरह कुछ नकली करने की कोशिश कर:

CustomerSyncResult ApplyActions(IEnumerable<CustomerAction> actions); 
IEnumerable<Customer> GetCustomers(IEnumerable<string> crmIDs, IEnumerable<string> emails); 

मुझे पता है कि मैं पूछ रहा हूँ जी एक कंबल सवाल है, लेकिन मुझे एक समय शुरू करने का एक बिल्ली है। डाउनलोड में सीएचएम में मेरे लिए पर्याप्त नमूने नहीं हैं और वहां कुछ ट्यूटोरियल अप्रचलित विधियों का उपयोग करते हैं और साथ ही साथ गणनाओं को कवर नहीं करते हैं जो मेरे लिए मुश्किल बनाते हैं :(

किसी भी सुझाव की सराहना की जाएगी ।

उत्तर

11

प्रयास करें

mockCrm.Setup(x => x.GetPickLists()) 
    .Returns(new List<PickList>()); 

QuickStart एक अच्छा संदर्भ है

अन्य तरीकों के लिए कुछ उदाहरण:।

mockCrm.Setup(x => x.ApplyActions(It.IsAny<IEnumerable>())) 
    .Returns(new CustomerSyncResult()); 

mockCrm.Setup(x => x.GetCustomers(It.IsAny<IEnumerable>(), 
            It.IsAny<IEnumerable>())) 
    .Returns(new List<Customers>()); 

एक तरफ के रूप में, बेहतर प्रकार की सुरक्षा के लिए अपने मूल इंटरफ़ेस में IENumerable जेनेरिक बनाएं।

तुम भी नए Moq v4 कार्यात्मक विनिर्देशों का उपयोग कर सकते हैं:

var list = new List<PickList> { new PickList() }; 

ICrmProvider crm = 
    Mock.Of<ICrmProvider>(
     x => 
     x.GetPickLists() == list); 

कि रूप में अच्छी तरह वर्तमान में दर्ज नहीं किया गया है। ध्यान दें कि अब आपको mock.Object लिखना नहीं है। कुछ लिंक:

सटीक सिंटैक्स (It.Is का उपयोग कर, सूची, आदि की सामग्री) आप क्या हासिल करने की कोशिश कर रहे हैं पर निर्भर करेगा। It.IsAny किसी भी तर्क से मेल खाता है, जो अनुक्रम या संग्रह पैरामीटर से निपटने के दौरान चीजों को आसान बना देगा।

+0

बहुत बढ़िया ... धन्यवाद! जेल से शुरू ... –

+0

इसके साथ चिपकाएं; यह एक महान पुस्तकालय है। आप DLLs को [LINQPad] (http://www.linqpad.net/) में आयात कर सकते हैं और यदि आप चाहें तो मॉकिंग प्रकारों के साथ खेल सकते हैं। – TrueWill

+0

अनुवर्ती प्रश्न ... क्या होगा यदि आप जिस वस्तु को मजाक कर रहे हैं उसे कन्स्ट्रक्टर में पैरामीटर की आवश्यकता है। उदाहरण के लिए: सार्वजनिक ग्राहक SyncEngine (ILoggingProvider लॉगिंगप्रदाता, आईसीआरएमप्रोवाइडर crmProvider, ICacheProvider cacheProvider) आप वहां कन्स्ट्रक्टर के पैरा कैसे प्राप्त करते हैं? –