2009-07-02 3 views
11

में गैर वर्चुअल विधियों का मज़ाक उड़ाते हुए मैं मैक्स का उपयोग करके किए गए कुछ वर्गों का परीक्षण करने की कोशिश कर रहा हूं, लेकिन मैंने देखा है कि सी # में सभी निःशुल्क मॉकिंग फ्रेमवर्क गैर-आभासी तरीकों का नकल करने में सक्षम नहीं हैं (यदि यह है एक इंटरफ़ेस में नहीं)।सी #

लेकिन, टाइपमैक ऐसा कर सकता है जो ऐसा कर सकता है, इसलिए यह संभव है। क्या कोई दिखा सकता है कि यह कैसे करें? अगर मैं इसे पूरा कर सकता हूं तो मैं ओपन सोर्स फ्रेमवर्क में योगदान करने की कोशिश भी कर सकता हूं।

अग्रिम

+0

सर्वश्रेष्ठ अनुमान, ऐपडोमेन्स का एक संयोजन, प्रतिबिंब। प्रवेश और हैकर और जादू का एक उचित हिस्सा। लेकिन मैं इसके बारे में कई शिक्षित अनुमान बनाने के लिए शायद ही योग्य हूं। –

+0

जोड़ा गया टाइपमॉक टैग – BengtBe

+0

यह भी देखें http://stackoverflow.com/questions/2187513/how-to-make-a-unit-test-mock-of-an-object-with-non-virtual-functions/6690183 –

उत्तर

7

धन्यवाद website यह AOP का उपयोग करता कॉल पुनर्निर्देशित करने के लिए के अनुसार:

Typemock अलगाने पहलू उन्मुख प्रौद्योगिकी का उपयोग करता वास्तविक कोड से कॉल पुनर्निर्देशित करने के लिए। यह डेवलपर्स को एक परीक्षण परिदृश्य के लिए आवश्यक बाहरी घटक के व्यवहार को परिभाषित करने में सक्षम बनाता है। उदाहरण के लिए, आप अनुकरण कर सकते हैं कि डेटाबेस को लिखते समय एक आउटऑफडिस्क स्पेस एक्सेप्शन फेंकने के लिए टाइपपेक आइसोलेटर को निर्देश देकर डेटाबेस में लिखते समय डिस्क भर जाती है। यह एक परिदृश्य है जो Typemock Isolator के बिना परीक्षण करना लगभग असंभव होगा। डेवलपर वास्तविक इकाई परीक्षण में व्यवहार को परिभाषित करता है और Typemock Isolator स्वचालित रूप से सभी आवश्यक घटकों को अलग करता है।

इस तकनीक के लिए आपको परीक्षण चलाने या वीएस प्लगइन का उपयोग करने से पहले एक विशेष वातावरण स्थापित करने की आवश्यकता है।

कुछ लोग सोचते हैं कि सबकुछ नकल करने की क्षमता Typemock बहुत शक्तिशाली बनाती है, क्योंकि आपको अच्छे डिज़ाइन के बारे में इतना कुछ नहीं सोचना पड़ता है। Ayende से एक उद्धरण:

प्रकार मॉक की मुख्य कमजोरी अपनी शक्ति है, यह मेरे शॉर्टकट है कि मैं लेने के लिए नहीं करना चाहती ले जाने की अनुमति है, मैं कम युग्मन और उच्च सामंजस्य के साथ एक प्रणाली प्राप्त करना चाहते हैं।

लेकिन निश्चित रूप से, क्योंकि वह राइनो नकली की creater है वह उद्देश्य :)

नहीं है मैं तो आप इस कार्यक्षमता के साथ एक मजाक ढांचा बनाना चाहते हैं आप काम का एक बड़ा सौदा के लिए कर रहे हैं लगता होगा , इसलिए मैं या तो टाइपपेक खरीदना चाहता हूं, या इसके बिना कोड सीखना चाहता हूं :)

+0

आप TypeMock चलाने से पहले एक विशेष वातावरण स्थापित करने की आवश्यकता है (इसके लिए एक वीएस प्लगइन भी है), और मैं टाइपमॉक के बारे में सहमत हूं, " –

+0

धन्यवाद ब्लेयर के साथ अपने आप को लटका देने के लिए पर्याप्त रस्सी से अधिक, आपकी टिप्पणी को दर्शाने के लिए पोस्ट अपडेट किया गया है! – BengtBe

+0

खैर, मुझे लगता है कि टाइपमेक के लिए मुख्य परिदृश्य यह है कि यदि आपको विरासत प्रणाली या तृतीय पक्ष के साथ काम करने की आवश्यकता है, जहां आप डिज़ाइन को आसानी से बदल नहीं सकते हैं और आप अभी भी यूनिट परीक्षण जोड़ना चाहते हैं और कुछ चीजों को मजाक करना चाहते हैं। – ChrisWue

14

मैं टाइपपेक से हूं, और मैं "बहुत शक्तिशाली" टिप्पणियों को संबोधित नहीं करूंगा (हालांकि यह मेरे बाहर है क्यों लोग नहीं चाहते हैं नौकरी के लिए सबसे अच्छा उपकरण का उपयोग करने के लिए)।

यहां बताया गया है कि टाइपपेक Isolator कैसे काम करता है। क्या आपने कभी प्रदर्शन प्रोफाइलर का उपयोग किया है? Isolator एक प्रोफाइलर है। यह सीएलआर में है और परीक्षण रन समय के भीतर, यह विधियों को बदलता है। जब कोई विधि JITted हो जाती है, तो यह बदल जाती है, इसलिए जब मूल कोड निष्पादित करने से पहले विधि चलती है, तो यह पूछता है: क्या मुझे इसे मूल रूप से लक्षित करना चाहिए, और यदि नहीं, तो मुझे क्या करना चाहिए? और इस विशिष्ट तकनीक के कारण, यह किसी भी .Net विधि और तकनीक का नकल कर सकता है। बस।

जब आप एपीआई का उपयोग कर व्यवहार सेट करते हैं, तो प्रश्नों का उत्तर अब अंतःस्थापित हो जाता है, और उस विधि के रनटाइम पर व्यवहार को बदलता है। सरल है, लेकिन कवर के तहत यह काम :) का एक बहुत

अलगाने एक वी.एस. ऐडइन के साथ आता है वी.एस. के भीतर मूल परीक्षण चलाने के बनाने के लिए है, और एक बिल्ड सर्वर में एक कमांड लाइन उपकरण और उपयोग के लिए MSBuild या NAnt कार्यों के साथ।

मुझे आपके किसी अन्य प्रश्न का उत्तर देने में खुशी होगी।

+2

असली तेज चाकू का उपयोग करते समय आपको खुद को काटने के लिए वास्तव में अच्छा होना चाहिए! ;)। मुझे लगता है कि उनका मतलब "बहुत शक्तिशाली" टिप्पणियों से है। –