2013-03-18 4 views
7

अधिकांश मॉकिंग फ्रेमवर्क केवल इंटरफेस का मज़ाक करने में सक्षम हैं, कुछ कक्षाओं के आभासी तरीकों का नकल कर सकते हैं। कुछ जावा मॉकिंग ढांचे स्थिर कक्षाओं का मज़ाक उड़ाने में भी सक्षम हैं।एक मॉकिंग फ्रेमवर्क कैसे काम करता है?

उदा। राइनो नकली:

var mock = MockRepository.GenerateMock<..>(); 

क्या जादू 'उत्पन्न नकली विधि में नीचे चला जाता है? क्या कोई कारण है कि सी # मॉकिंग फ्रेमवर्क स्थिर वर्गों का मज़ाक उड़ाते हैं? या यह सिर्फ 'डिजाइन पसंद' है?

+0

पुनश्च: विषय googling केवल मुझे ट्यूटोरियल कैसे एक मजाक ढांचे का उपयोग करने के लिए, मैं क्या * – bas

+0

कोशिश के लिए "मुझ पर OOO नज़र देख रहा हूँ हवा में हाथ लहराते * मैं एक रूपरेखा हूँ ... OOO ऐसी क्या खास बात नहीं देता है ":) – Eonasdan

+2

[moq] (https://code.google.com/p/moq/) खुला स्रोत है। –

उत्तर

4

यह वास्तव में बहुत ही मजेदार और आकर्षक है कि इस तरह के ढांचे के स्रोत कोड को देखने और अपने आप को जवाब मिल जाए। Rhino Mocks ओपन-सोर्स, साथ ही Moq और many others है। मैं निश्चित रूप से उनमें से एक में गोताखोरी की सिफारिश करेंगे।

(here से) आंतरिक कार्यान्वयन के लिए के रूप में:

हालांकि, ढांचा गैर आभासी तरीकों नकली नहीं कर सकते हैं, तो हम TouchIron विधि आभासी बनाने की जरूरत होगी। इसका कारण गहराई में है: राइनो मोक्स Castle Dynamic Proxy का उपयोग करता है ताकि इसे नकली करने के लिए आवश्यक प्रकारों को प्रक्षेपित किया जा सके, और डायनामिक प्रॉक्सी गैर-वर्चुअल, गैर-अमूर्त तरीकों से कॉल को रोक नहीं सकती है।

+0

शायद यह बताता है कि स्थिर कक्षाएं क्यों समर्थित नहीं हैं, क्योंकि इसमें स्थिर विधि कॉल को रीडायरेक्ट/प्रॉक्सी करने का कोई तरीका नहीं होगा। एक पूरी तरह से अलग दृष्टिकोण की आवश्यकता होगी। – AaronLS

+0

यो थक्स बहुत, सामान एटीएम के माध्यम से पढ़ना और Moq पर "डाउनलोड स्रोत" बटन खोजने की कोशिश कर रहा है :)। thx अब तक, बाद में वापस आ जाएगा – bas

1

लगभग सभी नेट मजाक चौखटे के Castle Windsor's Dynamic Proxy कार्यक्षमता का लाभ लेने। मैं उनमें से कुछ के माध्यम से जाने की सिफारिश करेंगे।

4

अधिकांश ओपन-सोर्स मॉकिंग फ्रेमवर्क Castle Windsor's Dynamic Proxy का उपयोग स्वचालित रूप से रनटाइम पर एक प्रकार उत्पन्न करने के लिए करते हैं, जिसे अपेक्षित व्यवहार के साथ प्रोग्राम किया जा सकता है। यही कारण है कि उनमें से अधिकतर ढांचे में इंटरफ़ेस या एक अमूर्त वर्ग होने की आवश्यकता होती है - वे किसी भी चीज़ को नकल करने में असमर्थ हैं जो वर्चुअल विधि नहीं है।

अन्य (वाणिज्यिक) मजाक चौखटे कि वास्तव में स्थिर और नियमित रूप से (सील) CLR प्रकार हैं, जिनमें अप्रबंधित CLR Profiler API पर आधारित हैं सहित कक्षाएं, नकली कर सकते हैं मौजूद हैं। असल में, मॉकिंग फ्रेमवर्क एक प्रोफाइलर के रूप में कार्य करता है, और जेआईटी संकलन से ठीक पहले एमएसआईएल निर्देशों को स्मृति में संशोधित करने में सक्षम है। इस तरह यह पूर्वनिर्धारित मानों के साथ किसी भी विधि के शरीर को प्रतिस्थापित करने में सक्षम है। उनमें से कुछ ढांचे मुक्त * हैं (माइक्रोसॉफ्ट फॉक्स, विजुअल स्टूडियो 2012 अल्टीमेट का हिस्सा), अन्य Typemock जैसे उत्पादों का भुगतान करते हैं।

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