2010-05-04 12 views
9

हम अपने यूनिट परीक्षणों में हाथ से लिखे गए स्टब्स का उपयोग करते हैं और मैं हमारी परियोजना में इज़ीमॉक या मॉकिटो जैसे नकली ढांचे की आवश्यकता की खोज कर रहा हूं।हमें Easymock, JMock या Mockito जैसे मॉकिंग फ्रेमवर्क की आवश्यकता क्यों है?

मुझे हाथ से लिखे गए स्टब्स से मॉकिंग फ्रेमवर्क पर स्विच करने के लिए एक अनिवार्य कारण नहीं मिला है।

क्या कोई भी कृपया उत्तर दे सकता है कि जब कोई हाथ से लिखे गए मैक्स/स्टब्स का उपयोग कर पहले से ही यूनिट परीक्षण कर रहा है तो कोई ढांचा ढांचे का चयन क्यों करेगा।

धन्यवाद

+0

इसके अलावा, http://stackoverflow.com/questions/1717107/why-do-we-need-mocking-frameworks – Finglas

उत्तर

2

मैं उसी तरह (हाथ से mocks लेखन) शुरू किया और अब तक मुझे लगभग पूरी तरह से EasyMock में स्विच।

मुझे लगता है कि EasyMock का उपयोग आमतौर पर तेज़ और अधिक लचीला दोनों होता है।

आम तौर पर पहली बार मुझे एक नकली की ज़रूरत होती है, मैं इसे EasyMock के साथ कोड की कुछ पंक्तियों में रख सकता हूं, जबकि हाथ से मुझे आवश्यक इंटरफ़ेस को लागू करने की आवश्यकता है (पर्याप्त मेला, यह आईडीई द्वारा उत्पन्न किया जा सकता है IntelliJ) और उसके बाद आवश्यक प्रतिक्रिया उत्पन्न करने के लिए आवश्यक कोड जोड़ें और/या कॉल के प्रभावों को समझने की अनुमति दें।

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

इसके विपरीत, EasyMock के साथ मैं प्रत्येक परीक्षण के लिए स्वतंत्र रूप से अपने मैक्स को कॉन्फ़िगर कर सकता हूं। इस प्रकार व्यवहार को इकाई परीक्षण कोड के भीतर स्पष्ट रूप से नियंत्रित और दृश्यमान किया जाता है, और दुष्प्रभावों का कोई खतरा नहीं होता है।

उल्लेख नहीं है कि EasyMock के साथ आप यह सत्यापित कर सकते हैं कि आवश्यक विधियों में आवश्यक विधियों को बुलाया जाता है, यदि आपको (और मैं करता हूं, हर अब और फिर) की आवश्यकता होती है। हाथ से इसे लागू करना (विशेष रूप से एक सामान्य फैशन में) गर्दन में काफी दर्द होगा, बिना किसी अतिरिक्त लाभ के।

1

कभी-कभी घोषणात्मक तरीके से मोक्स बनाना आसान हो सकता है और यह हाथ से ढांचे का उपयोग करके कुछ प्रकार के व्यवहारों को आसान बनाने में आपकी मदद कर सकता है। एक और छोटा सा फायदा यह भी हो सकता है कि मॉकिंग फ्रेमवर्क का उपयोग करके आप मॉकिंग के बारे में स्पष्ट हैं।

2

बस हर दूसरे डेवलपर की तरह मुझे मौजूदा समाधान का उपयोग करने के बजाय कोड लिखना पड़ता है - "यहां आविष्कार नहीं किया गया" सिंड्रोम।

आपका प्रश्न यह सुझाव देता है कि आप अपने लिए ऐसा करने वाले ढांचे का उपयोग करने के बजाय दो बार नकली/नकली कक्षाओं को लिखना पसंद करते हैं। एक मॉकिंग फ्रेमवर्क का उपयोग करके जब भी आप फ्लेक्ड ऑब्जेक्ट बदलते हैं तो अपने हाथ लुढ़काए गए मैक्स लिखने, रिफैक्टर करने और अपडेट करने की आवश्यकता से आपको मुक्त कर देते हैं।

दूसरे शब्दों में एक मॉकिंग फ्रेमवर्क का उपयोग करना किसी अन्य तृतीय पक्ष लाइब्रेरी की तरह है। ओआरएम - किसी और ने कोड लिखा है, इसलिए आपको यह नहीं करना है।

9

आप मार्टिन फाउलर के Mocks Aren't Stubs आलेख को पढ़ना चाहेंगे।

  • एक ठूंठ की नौकरी सभी कॉल्स
  • एक नकली अतिरिक्त उम्मीद कॉल विशिष्ट मानदंडों के साथ एक विशेष क्रम में आने के लिए, के लिए जाना जाता परिणाम लौटाना है, और जब इन अपेक्षाओं एक अपवाद फेंक देगा: बुनियादी अंतर यह है नहीं मिले हैं।

कुछ त्रुटि स्थिति हैं जिन्हें स्टब्स के साथ परीक्षण नहीं किया जा सकता है। दूसरी तरफ, मैक्स का उपयोग करके परीक्षण अक्सर कम स्थिर होते हैं।

जबकि स्टब्स को उचित प्रयास के साथ मैन्युअल रूप से लिखा जा सकता है, तो मोक्स को और अधिक काम की आवश्यकता होगी। और एक अच्छा मॉकिंग फ्रेमवर्क लेखन स्टब्स को तेज़ी से और आसान बना सकता है।

+0

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

13

सरल उत्तर हम की आवश्यकता नहीं है।

न ही हमें अन्य मौजूदा ढांचे की आवश्यकता है, लेकिन मॉकिंग फ्रेमवर्क का उपयोग करके हमारे जीवन आसान बनाता है। डेवलपर्स के रूप में हम जो मॉकिंग फ्रेमवर्क कर सकते हैं उसे बनाने या करने के बजाए, हम समस्या पर अधिक समय बिता सकते हैं।

"मैं नहीं हाथ लिखा स्टब्स से मजाक चौखटे का उपयोग करने जा के लिए एक बाध्यकारी कारण मिल रहा है।"

मैं बिल्कुल वही था। मुझे एक मॉकिंग फ्रेमवर्क सीखना क्यों परेशान होना चाहिए? हाथ से लिखे गए स्टब्स ठीक करते हैं।

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

एक मजाक ढांचे के लाभ हैं:

  • आसान (व्यक्तिपरक है, लेकिन कुछ समय बाद आप हाथ से लिखा कार्यान्वयन बारे में नहीं होगा)
  • कम संहिता (चौखटे आप एक नकली बनाने की अनुमति लाइनों, बल्कि पूर्ण वर्ग घोषणाओं)
  • अनुसरण करता सूखी (आप नकली कार्यान्वयन)
  • दोहरा नहीं करना पड़ेगा से की बात में

सबसे बड़ा लाभ तब होता है जब आपको नकली वस्तुओं की आवश्यकता होती है। एक विधि कहलाए जाने के लिए कोड लिखने के लिए, कितनी बार और आगे एक छोटा कार्य है। अगर किसी और ने ऐसा किया है, और एक बड़े पैमाने पर परीक्षण, अच्छी तरह से प्रलेखित ढांचे का निर्माण किया है, तो इसका अर्थ यह नहीं होगा कि इसका उपयोग न करें। किसी भी ढांचे की तरह, आप इसके बिना ठीक से जा सकते हैं, लेकिन कभी-कभी सही टूल का उपयोग करके नौकरी बहुत आसान हो जाती है।

+1

जैसा कि बताया गया है, यह * "मोक्स स्टब्स नहीं हैं" * लेख की जांच करने लायक है। मॉकिंग फ्रेमवर्क मॉकिंग, स्टबिंग और फिकिंग की अनुमति देते हैं। दूसरे शब्दों में, वे बहुत बहुमुखी हैं। – Finglas