प्रोग्रामिंग में "स्टब" का क्या अर्थ है?


117

उदाहरण के लिए, इस उद्धरण में इसका क्या मतलब है?

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


9
क्या आपने एक "स्टब" में स्वीकृत उत्तर पर एक नज़र डाली है? ?
निक

जवाबों:


104

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

बाहरी निर्भरता - मौजूदा निर्भरता:
यह आपके सिस्टम में एक वस्तु है कि परीक्षण के तहत आपका कोड आपके साथ बातचीत करता है और जिस पर आपका कोई नियंत्रण नहीं है। (सामान्य उदाहरण फाइल सिस्टम, थ्रेड्स, मेमोरी, टाइम और इसी तरह के हैं।)

नीचे दिए गए कोड में विदेशी मुद्रा:

public void Analyze(string filename)
    {
        if(filename.Length<8)
        {
            try
            {
                errorService.LogError("long file entered named:" + filename);
            }
            catch (Exception e)
            {
                mailService.SendEMail("admin@hotmail.com", "ErrorOnWebService", "someerror");
            }
        }
    }

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


9
अंग्रेज़ी? मौजूदा निर्भरता क्या है?
Jwan622

17
@ Jwan622 आम शब्दों में: कुछ भी जो कोड का उपयोग करता है। यह समझने में मदद मिल सकती है कि क्या आप फिर से पढ़ते हैं और "निर्भरता" को "वर्ग" या "फ़ंक्शन" या जो कुछ भी (आपकी पृष्ठभूमि पर निर्भर करता है) के साथ बदल देते हैं। कभी-कभी मौजूदा वर्ग / फ़ंक्शन का उपयोग करना एक व्यवहार्य विकल्प नहीं होता है और आपको एक स्टब की आवश्यकता होती है (उदाहरण के लिए स्वचालित यूनिट-परीक्षण जो कि सिस्टम पर निर्भर करता है जैसे कि सिस्टम की वर्तमान तिथि और समय)।
मास्टर मैस्टिक

101

इस संदर्भ में एक स्टब , का अर्थ है एक नकली कार्यान्वयन।

यही है, एक सरल, नकली कार्यान्वयन जो इंटरफ़ेस के अनुरूप है और परीक्षण के लिए उपयोग किया जाना है।


3
मार्टिन फॉवलर द्वारा प्रसिद्ध मॉक आर्सेन्ट स्टब्स लेख में अधिक विवरण नहीं दिए गए हैं : "लेकिन जितनी बार मैं नकली वस्तुओं को खराब तरीके से नहीं देखता हूं। विशेष रूप से मैं उन्हें अक्सर स्टब्स के साथ भ्रमित देखता हूं - पर्यावरण के परीक्षण के लिए एक सामान्य सहायक।"
pba

61

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

कर्मचारी डेटाबेस तैयार नहीं है? जेन डो, जॉन डो ... आदि के साथ एक सरल एक बनाओ। एपीआई तैयार नहीं है? एक स्थिर .json फ़ाइल बनाकर एक नकली बना लें जिसमें नकली डेटा हो।


1
उदाहरण के लिए :) धन्यवाद
CapturedTree

8

इस संदर्भ में, "मॉक" शब्द का प्रयोग "मॉक" के स्थान पर किया जाता है, लेकिन स्पष्टता और सटीकता के लिए, लेखक को "मॉक" का उपयोग करना चाहिए, क्योंकि "मॉक" एक प्रकार का स्टब है, लेकिन परीक्षण के लिए। आगे भ्रम से बचने के लिए, हमें यह परिभाषित करने की आवश्यकता है कि स्टब क्या है।

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

एक मॉक एक बहुत ही विशिष्ट और प्रतिबंधक प्रकार का स्टब है, क्योंकि एक मॉक परीक्षण के लिए किसी अन्य फ़ंक्शन या ऑब्जेक्ट का प्रतिस्थापन है। व्यवहार में हम अक्सर परीक्षण वातावरण में एक दूरस्थ कार्यक्रम को बदलने के लिए स्थानीय कार्यक्रमों (कार्यों या वस्तुओं) के रूप में नकली का उपयोग करते हैं। किसी भी स्थिति में, नकली प्रतिबंधित संदर्भ में प्रतिस्थापित कार्यक्रम के वास्तविक व्यवहार का अनुकरण कर सकता है।

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

आमतौर पर, RPC, RMI, CORBA, और इसी तरह, एक ग्राहक-साइड स्टब्स को अलग करता है , जो ज्यादातर तर्क-वितर्क करने या रिमोट इन्वोकेशन करने, और सर्वर-साइड स्टब्स का प्रदर्शन करने का ध्यान रखता है, जो ज्यादातर अनमैर्शिंग / डीसरियलाइजिंग का ध्यान रखते हैं। तर्क और वास्तव में दूरस्थ फ़ंक्शन / विधि को निष्पादित करते हैं। जाहिर है, क्लाइंट स्टब्स क्लाइंट की तरफ स्थित होते हैं, जबकि गंभीर स्टब्स (अक्सर कंकाल कहा जाता है) सर्वर साइड पर स्थित होते हैं।

वस्तु कुशल संदर्भों के साथ व्यवहार करते समय अच्छे कुशल और सामान्य स्टब्स लिखना काफी चुनौतीपूर्ण हो जाता है। वितरित वस्तुओं के संदर्भों के साथ आरएमआई और कॉर्बा जैसे अधिकांश वितरित ऑब्जेक्ट फ्रेमवर्क, लेकिन उदाहरण के लिए आरईएसटी वातावरण में कुछ प्रोग्रामर इससे बचते हैं। आमतौर पर, REST वातावरण में, जावास्क्रिप्ट प्रोग्रामर AJAX इनवोकेशन (ऑब्जेक्ट क्रमांकन द्वारा समर्थित JSON.parseऔर JSON.stringify) का उपयोग करने के लिए सरल स्टब फ़ंक्शंस बनाते हैं । स्वैगर Codegen परियोजना स्वचालित रूप से विभिन्न भाषाओं में बाकी स्टब्स पैदा करने के लिए एक व्यापक सहायता प्रदान करता है।


4

स्टब एक फ़ंक्शन परिभाषा है जिसमें सही फ़ंक्शन नाम है, मापदंडों की सही संख्या और सही प्रकार का डमी परिणाम पैदा करता है।

यह परीक्षण लिखने में मदद करता है और फ़ंक्शन डिज़ाइन पूरा होने से पहले ही उदाहरणों को चलाना संभव बनाने के लिए एक प्रकार की मचान का काम करता है।


3

इस तरह के स्टब को बनाने के लिए आपके पास एक बहुत अच्छा परीक्षण ढांचा भी है। मेरी preferrable में से एक है Mockito वहाँ भी है EasyMock और दूसरों ... लेकिन Mockito महान है आप इसे पढ़ना चाहिए - बहुत ही सुंदर और शक्तिशाली पैकेज


3

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

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


0

आरपीसी स्टब्स

  • मूल रूप से, क्लाइंट-साइड स्टब एक ऐसी प्रक्रिया है जो क्लाइंट को दिखता है जैसे कि यह एक कॉल करने योग्य सर्वर प्रक्रिया थी।
  • सर्वर-साइड स्टब सर्वर को ऐसा लगता है मानो वह कॉलिंग क्लाइंट है।
  • क्लाइंट प्रोग्राम को लगता है कि यह सर्वर को बुला रहा है; वास्तव में, यह क्लाइंट स्टब कह रहा है।
  • सर्वर प्रोग्राम को लगता है कि यह क्लाइंट द्वारा बुलाया गया है; वास्तव में, यह सर्वर स्टब द्वारा कहा जाता है।
  • RPC होने के लिए स्टब्स एक दूसरे को संदेश भेजते हैं।

स्रोत


0

"स्टबिंग-आउट एक फ़ंक्शन का मतलब है कि आप केवल यह दिखाने के लिए पर्याप्त लिखेंगे कि फ़ंक्शन को कॉल किया गया था, बाद में जब आपके पास कोई समय हो, तब के लिए विवरण छोड़ दें।"

से: एसईसीएस खुद को सी ++, जेसी लिबर्टी और ब्रैडली जोन्स सिखाएं

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