एक "ठूंठ" क्या है?


116

इसलिए, TDD में और अधिक पाने के लिए अपने नए वर्षों के संकल्प के साथ, मैं अब राइनो मोक्स के साथ अधिक काम करना शुरू कर रहा हूं ।

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

"स्टब" क्या है?


6
पहले आप एक सवाल पूछते हैं, और फिर आप जवाब देते हैं?
एम्पि

17
जैसा कि सवाल में कहा गया है - मैं अपनी समझ के सत्यापन को सही होने के लिए देख रहा हूं, मैं चाहता था कि इसका उत्तर यहां (जैसा मेरा है या नहीं) इस बहुप्रचारित-लेकिन-शायद ही-सुचिंतित प्रश्न पर एक संसाधन प्रदान करने के लिए है: )
रोब कूपर

42
स्वयं के प्रश्न का उत्तर देने का भी अक्सर पूछे जाने वाले प्रश्न में साइट का उपयोग करने का एक वैध तरीका बताया गया है - इसे प्रोत्साहित किया जाना चाहिए, वास्तव में।
एरिक फ़ोर्ब्स

अपने स्वयं के प्रश्नों का उत्तर देना ठीक है, हालांकि प्रश्न में थोड़ा बहुत शोर (आत्मकथा) है, और इसका उत्तर खोजने के लिए व्यक्ति ने क्या किया है, इसका कोई उत्तर नहीं मिल रहा है।
इरिक

जवाबों:


112

मार्टिन फाउलर ने इस विषय पर एक उत्कृष्ट लेख लिखा । उस लेख से:

Meszaros परीक्षण के उद्देश्यों के लिए एक वास्तविक वस्तु के स्थान पर किसी भी तरह के ढोंग ऑब्जेक्ट के लिए सामान्य शब्द के रूप में टेस्ट डबल शब्द का उपयोग करता है। यह नाम फिल्मों में एक स्टंट डबल की धारणा से आता है। (उनका एक उद्देश्य किसी भी नाम का उपयोग करने से बचना था जो पहले से ही व्यापक रूप से उपयोग किया गया था।) मेस्ज़्रोस ने तब चार विशेष प्रकार के दोहरे को परिभाषित किया था:

  • डमी वस्तुओं को पास किया जाता है लेकिन वास्तव में कभी भी उपयोग नहीं किया जाता है। आमतौर पर वे बस पैरामीटर सूचियों को भरने के लिए उपयोग किए जाते हैं।
  • नकली वस्तुओं में वास्तव में काम करने वाले कार्यान्वयन होते हैं, लेकिन आमतौर पर कुछ शॉर्टकट लेते हैं जो उन्हें उत्पादन के लिए उपयुक्त नहीं बनाता है (स्मृति डेटाबेस में एक अच्छा उदाहरण है)।
  • स्टब्स परीक्षण के दौरान किए गए कॉलों के लिए डिब्बाबंद उत्तर प्रदान करते हैं, आमतौर पर परीक्षण के लिए प्रोग्राम किए गए बाहर के किसी भी चीज़ का जवाब नहीं देते हैं। स्टब्स कॉल के बारे में जानकारी भी रिकॉर्ड कर सकते हैं, जैसे कि एक ईमेल गेटवे स्टब जो इसे भेजे गए संदेशों को याद रखता है, या हो सकता है कि यह केवल कितने संदेश 'भेजे'।
  • मोक्स वे हैं जिनके बारे में हम यहां बात कर रहे हैं: ऑब्जेक्ट्स पूर्व-अपेक्षाओं के साथ प्रोग्राम किए जाते हैं जो उन कॉलों का एक विनिर्देश बनाते हैं जो उन्हें प्राप्त होने की उम्मीद है।

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


2
तो फिर नकली वस्तुओं और सत्यों में क्या अंतर है? जैसा कि आपने कहा, उन्हें लागू करने के लिए समान भूमिका है, है ना?
एलकेएम

4
@ एलकेएम एक नकली वस्तु एक वास्तविक वस्तु है जो वास्तविक कार्यक्षमता को लागू करती है और चीजों को करती है। स्टब्स सिर्फ "डिब्बाबंद जवाब" जैसे हैं। हार्ड कोडित JSON परिणाम है कि वेब सर्वर से वापस आ जाएगा की नकल।
user3344977

31

"स्टब" एक इंटरफ़ेस का कार्यान्वयन है जो डेटा / कुछ प्रकार की प्रतिक्रिया प्रदान करने के लिए मौजूद है। उदाहरण के लिए:

  • एक डेटासेट
  • उपयोगकर्ताओं की सूची
  • एक Xml फ़ाइल

आम तौर पर यह एक अन्य सेवा (यह वेब सेवा, एक अन्य एप्लिकेशन, एक डेटाबेस) द्वारा प्रदान की जाएगी, लेकिन कोड की परीक्षण क्षमता में सुधार करने के लिए , परिणाम "नकली" हैं।

इसका एक प्रमुख लाभ यह है कि यह अपेक्षित आंकड़ों के आधार पर इकाई परीक्षणों में अभिकथन करने की अनुमति देता है। यदि डेटा त्रुटियों के कारण त्रुटियां होती हैं, तो परीक्षण आसानी से जोड़े जा सकते हैं, एक नया स्टब बनाया गया (डेटा त्रुटि की नकल करते हुए) और त्रुटि को ठीक करने के लिए निर्मित कोड।

स्टब्स को अलग Mocks में है कि वे प्रतिनिधित्व करते हैं और परीक्षण करने के लिए उपयोग किया जाता है राज्य , एक वस्तु की, जबकि एक नकली इसके परीक्षण बातचीत


आपके उत्तर के लिए धन्यवाद, लेकिन मुझे अभी भी समझ नहीं आया: "एक इंटरफ़ेस का कार्यान्वयन" ??
BKSpurgeon

6

मेरा मानना ​​है कि "स्टब" STartUpBlock से आता है। इसका उपयोग कोड के कुछ हिस्सों को संदर्भित करने के लिए किया जाता है जो ऑटो आपकी मदद करने के लिए उत्पन्न होते हैं, डेवलपर, आरंभ करें।


1
मुझे नहीं लगता कि यह सही है। यह शायद घर के निर्माण में इस अभ्यास से आता है: hunker.com/12000314/what-is-a-stub-out
mattdm

3

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


यह उत्तर बेहतर होगा यदि अधिक विस्तार से समझाया जाए: स्टब विधि का उद्देश्य क्या है? इसका उपयोग कैसे किया जा सकता है? यह महत्वपूर्ण क्यों है?
इवान वीसबर्ग

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

1
यह बहुत अच्छा है कि आप सीख रहे हैं! आपको अपने मूल उत्तर को संपादित करना चाहिए ताकि भविष्य के पाठक टिप्पणियों में पोस्ट करने के बजाय उससे आसानी से सीख सकें। इसके अतिरिक्त - यदि आप किसी चीज़ के बारे में सुनिश्चित नहीं हैं, तो आप इसके बारे में एक आधिकारिक जवाब क्यों पोस्ट कर रहे हैं?
इवान वीसबर्ग

1
यदि आप एक स्व-शिक्षार्थी हैं, तो ठीक है - StackOverflow पर, आपको उत्तर पोस्ट करने की आवश्यकता नहीं है जब तक कि आप उनके बारे में सुनिश्चित न हों। यह एक मानक मंच नहीं है। देखें: stackoverflow.com/tour
इवान वेसबर्ग

1
गाइड और सुझावों के लिए बहुत बहुत धन्यवाद। मैं इसकी प्रशंसा करता हूँ!
नासरेर

3

मैंने हाल ही में प्रश्न का सामना किया और माना कि स्टब और ड्राइवर के बीच यह तुलना वास्तव में स्पष्ट और सहायक है:

असल में, स्टब्स और ड्राइवर रूटीन हैं जो वास्तव में खुद को घोषित करने और उन्हें स्वीकार करने वाले मापदंडों को छोड़कर कुछ भी नहीं करते हैं। बाकी कोड तब इन मापदंडों को ले सकते हैं और उन्हें इनपुट के रूप में उपयोग कर सकते हैं।

+ --------- + ------------------------------- + ------- ------------------------ +
| | ठूंठ | ड्राइवर |
+ --------- + ------------------------------- + ------- ------------------------ +
| प्रकार | डमी कोड | डमी कोड |
+ --------- + ------------------------------- + ------- ------------------------ +
| में इस्तेमाल किया | टॉप डाउन इंटीग्रेशन | एकीकरण के नीचे |
+ --------- + ------------------------------- + ------- ------------------------ +
| उद्देश्य | ऊपरी परीक्षण की अनुमति देने के लिए | निम्न का परीक्षण करने की अनुमति देने के लिए |
| | कोड के स्तर, जब | कोड के स्तर, जब |
| | कोड के निचले स्तर हैं | कोड के ऊपरी स्तर हैं |
| | अभी तक विकसित नहीं हुआ है। | अभी तक विकसित नहीं हुआ है। |
+ --------- + ------------------------------- + ------- ------------------------ +
| उदाहरण | ए और बी घटक हैं। | ए और बी घटक हैं। |
| | ए ---> बी | ए ---> बी |
| | | |
| | A विकसित किया गया है। | अभी भी विकसित करने की आवश्यकता है
| | B को अभी भी विकसित करने की आवश्यकता है B विकसित किया गया है। |
| | इसलिए, स्टब का उपयोग किया जाता है | इसलिए, ड्राइवर का उपयोग किया जाता है |
| | इसकी नकल करने के लिए बी के स्थान पर। | के स्थान पर ए की नकल करने के लिए |
| | | |
| | ए ---> ठूंठ | ड्राइवर ---> बी |
+ --------- + ------------------------------- + ------- ------------------------ +

स्टब और ड्राइवर के बीच अंतर से


0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.