मॉकिंग फ्रेमवर्क चुनने में मुख्य कारक क्या हैं?


15

मैं अपने यूनिट परीक्षणों में वस्तुओं के साथ आरंभ करना चाहता हूं। ऐसा लगता है कि वहाँ अच्छी रूपरेखा के टन हैं।

  1. क्या अलग-अलग रूपरेखाओं में अलग-अलग लक्ष्य दर्शक होते हैं?
  2. मेरी स्थिति के लिए कौन सा ढांचा चुनने पर मुझे किन कारकों पर विचार करना चाहिए?

मैं एक .Net वातावरण में काम कर रहा हूं, लेकिन मैंने इस सवाल का उद्देश्य सामान्य रूप से नकली ढांचे पर लागू होना था।
इपोट्टर

जवाबों:


14

क्या अलग-अलग रूपरेखाओं में अलग-अलग लक्ष्य दर्शक होते हैं?

हाँ। Microsoft मोल्स , टाइपमॉक आइसोलेटर , और जस्टमॉक जैसे कुछ ढांचे आपको कुछ भी करने में सक्षम होने की अनुमति देते हैं। ये मॉकिंग टूल आम तौर पर डेवलपर्स के लिए बेहतर होते हैं जो उन्हें मौजूदा विरासत कोड पर उपयोग करना चाहते हैं क्योंकि ऐसा डिजाइन में रिफ्लेक्टर संभव नहीं है जो अधिक परीक्षण योग्य हो। *

परंपरागत रूप से, परीक्षण योग्य डिजाइन का मतलब है कि कोडबेस को इंटरफेस, अमूर्त वर्ग, आभासी तरीकों, बिना वर्ग के आदि का उदारवादी उपयोग करने की आवश्यकता है, इसलिए, Moq और RhinoMocks जैसे पारंपरिक मॉकिंग फ्रेमवर्क टेस्टेड डेवलपमेंट, डिपेंडेंसी इंजेक्शन और विकसित कोड के साथ अच्छी तरह से काम करते हैं। ऐसी अन्य अवधारणाएँ। वैसे, मैं अत्यधिक निर्भरता इंजेक्शन का उपयोग करने की सलाह दूंगा क्योंकि आप केवल परीक्षण योग्य कोड की तुलना में बहुत अधिक प्राप्त करते हैं, लेकिन साथ ही अधिक रखरखाव योग्य कोड भी।

मेरी स्थिति के लिए कौन सा ढांचा चुनने पर मुझे किन कारकों पर विचार करना चाहिए?

  • विकास गतिविधि। Moq और RhinoMocks जैसे उपकरण बहुत सक्रिय और लोकप्रिय हैं और इस प्रकार आज तक हैं।
  • ओपन सोर्स बनाम। वाणिज्यिक । इस तुलना के लिए विभिन्न पेशेवरों और विपक्षों पर विचार करें। लागत, समर्थन, आदि ...
  • आयु वाले बच्चे। टूल कितना नया है। क्या यह बीटा (Microsoft मोल्स की तरह) है या इसमें कई स्थिर रिलीज़ हैं? उदाहरण के लिए, मैं विरासत कोड के लिए मोल्स को पसंद करता हूं, लेकिन कई कीड़े हैं जिन्हें इसमें संबोधित करने की आवश्यकता है और उन्हें संबोधित होने से पहले इंतजार करना होगा (अगली रिलीज नवंबर 2011)।
  • प्रलेखन। कई किताबें और ब्लॉग हैं जो यूनिट टेस्टिंग, मॉकिंग, ऑटो-मॉकिंग आदि को कवर करते हैं। इसके अलावा टूल का अपना प्रलेखन कितना अच्छा है?
  • सिंटेक्स । प्रत्येक उपकरण का एक ही बात कहने का अपना तरीका है। देखें कि आपके लिए कौन सा बेहतर है।
  • गति । उपकरण जो सीएलआर प्रोफाइलिंग (टाइपमॉक, मोल्स, जस्टमॉक) का उपयोग करते हैं, पारंपरिक लोगों (Moq, RhinoMocks) की तुलना में बहुत धीमा हो सकता है। यह स्पीड पेनल्टी एक समस्या हो सकती है क्योंकि आप कई यूनिट टेस्ट कर सकते हैं। अंगूठे का नियम यदि एक परीक्षण 1/10 से अधिक समय लेता है तो यह बहुत धीमा है।
  • सामुदायिक सहायता । क्या अन्य डेवलपर अन्य टूल लिख रहे हैं जो मॉकिंग टूल का विस्तार करते हैं (या तारीफ में काम करते हैं)? वहाँ एक है Moq.Contrib परियोजना है कि (जो ऊपर परीक्षण लेखन समय की गति में मदद करता है) MOQ के लिए एक ऑटो-मजाक की क्षमता कहते हैं। बेहतर अभी तक, AutoFixure , AutoFixture.AutoMoq, AutoFixture.AutoRhinoMocks है, जो ऑटो-मॉकिंग, प्लस अनाम चर निर्माण के लिए भी अनुमति देता है।

* लिगेसी कोड के साथ प्रभावी ढंग से कार्य करना देखें , पारंपरिक परीक्षण (और मॉकिंग) टूल के साथ कोड में परीक्षण के बिना धीरे-धीरे रिफ्लेक्टर कोड के तरीके के लिए।


2

Moq ट्यूटोरियल TypeMock अलगाने, RhinoMocks, और MOQ: शुरुआत जो कुछ विशिष्ट उपकरणों के संबंध में इस पर चर्चा में पृष्ठभूमि, दर्शन, और विवाद सही पर एक अनुभाग है। यह Moq की व्याख्या करने के लिए लिखा गया है, इसलिए यह स्वाभाविक रूप से थोड़ा तिरछा है, लेकिन मैंने इसे मेरे लिए काफी मददगार पाया जब मॉकिंग फ्रेमवर्क के कुछ अंतरों को समझने की कोशिश की।

मुझे C # Mocking चौखटे पर इस SO थ्रेड की प्रतिक्रियाएँ भी उपयोगी लगीं । अधिकांश केवल एक मॉकिंग फ्रेमवर्क को संदर्भित करते हैं, जो उपयोगकर्ता वास्तव में उपयोगी पाता है, लेकिन एक तरीके से हैराल्डव से एक प्रतिक्रिया है जो प्रॉक्सी-आधारित मॉक और प्रोफाइलर-आधारित मॉक पर चर्चा करती है।

मैं एक तुलना चार्ट भी ऑनलाइन पा रहा था। ध्यान दें कि यह 2009 से है, इसलिए मुझे यकीन नहीं है कि यह अप-टू-डेट है; कम से कम एक टिप्पणी है जो बताती है कि टाइपमॉक और कॉलबैक की जानकारी पुरानी है, लेकिन चार्ट इस मुद्दे को उठाने के लिए अच्छा हो सकता है, भले ही आपको वर्तमान स्थिति क्या है यह देखने के लिए लेगवर्क करने की आवश्यकता होगी: RhinoMocks, Moq, NMock, और टाइपमॉक तुलना चार्ट

आसान कोड तुलना के लिए कई मॉकिंग फ्रेमवर्क में परीक्षण मामलों के साथ Google कोड पर एक परियोजना है: मॉकिंग-फ्रेमवर्क तुलना


2
  1. उपयोग में आसानी। कुछ रूपरेखाओं में उपयोग के अधिक उन्नत मुहावरे हैं। उदाहरण के लिए, MOQ एनकोड उम्मीदों पर lambdas के उपयोग की अनुमति देता है। कुछ पुराने पुस्तकालय इसका समर्थन नहीं करते हैं।
  2. स्पीड। प्रत्येक इकाई परीक्षण तेजी से होना चाहिए ताकि आपकी पूरी लाइब्रेरी को चलाने में घंटों न लगें। कुछ मॉकिंग फ्रेमवर्क में स्टेटिकली मॉक जेनरेट होते हैं, जो तेज है। अन्य ढांचे गतिशील रूप से रनटाइम पर कोड उत्पन्न करते हैं, जो धीमा है।
  3. सहयोग। आप एक ऐसी रूपरेखा चाहते हैं जो सक्रिय रूप से फ़िक्सेस के साथ समर्थित हो और .NET के नए संस्करणों का समर्थन करने के लिए अपडेट की गई हो, जैसा कि वे जारी किए गए हैं।
  4. शक्ति। मैंने जितने भी मॉकिंग फ्रेमवर्क पर शोध किया है, वे सत्ता के मामले में लगभग समान हैं। एक उल्लेखनीय अपवाद है। Microsoft मोल्स "गैर-आभासी / स्थैतिक तरीकों को सील किए गए प्रकारों में" रखने के लिए अनुमति देता है। यह कुछ ऐसा है जो मेरे ज्ञान के लिए कोई अन्य नकली रूपरेखा का समर्थन नहीं करता है।

मेरी टीम में, हमने Microsoft मोल्स को चुना । यह # 2, # 3, और # 4 पर महत्वपूर्ण रूप से जीतता है, हालांकि यह अधिकांश विकल्पों की तुलना में कम मुहावरेदार है और # 1 पर कम अंत में है।


अब टाइपमॉक, जस्टमॉक जैसे कई ढांचे स्थिर तरीकों, सीलबंद कक्षाओं आदि की नकल करने की अनुमति देते हैं
21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.