जैसा कि शीर्ष मत वाले उत्तर द्वारा उल्लेख किया गया है, मार्टिन फाउलर ने मोक्स आर स्टब्स में इन भेदों पर चर्चा की है , और विशेष रूप से उप -अंतर द मोक्स और स्टब्स के बीच अंतर है , इसलिए उस लेख को पढ़ना सुनिश्चित करें।
ये चीजें अलग कैसे हैं, इस पर ध्यान केंद्रित करने के बजाय , मुझे लगता है कि यह अलग-अलग अवधारणाएं क्यों हैं, इस पर ध्यान केंद्रित करना अधिक ज्ञानवर्धक है । प्रत्येक एक अलग उद्देश्य के लिए मौजूद है।
नकली
एक नकली एक कार्यान्वयन है जो "स्वाभाविक रूप से" व्यवहार करता है, लेकिन "वास्तविक" नहीं है। ये फ़ज़ी कॉन्सेप्ट हैं और इसलिए अलग-अलग लोगों की अलग-अलग समझ होती है कि कौन सी चीज़ नकली है।
नकली का एक उदाहरण एक इन-मेमोरी डेटाबेस (उदाहरण के लिए :memory:
स्टोर के साथ साइक्लाइट का उपयोग करना ) है। आप इसका उपयोग कभी भी उत्पादन के लिए नहीं करेंगे (चूंकि डेटा कायम नहीं है), लेकिन यह एक परीक्षण वातावरण में उपयोग करने के लिए डेटाबेस के रूप में पूरी तरह से पर्याप्त है। यह "वास्तविक" डेटाबेस की तुलना में बहुत अधिक हल्का है।
एक अन्य उदाहरण के रूप में, शायद आप उत्पादन में किसी प्रकार के ऑब्जेक्ट स्टोर (जैसे अमेज़ॅन एस 3) का उपयोग करते हैं, लेकिन एक परीक्षण में आप बस डिस्क पर फ़ाइलों को ऑब्जेक्ट्स को बचा सकते हैं; तब आपका "डिस्क टू सेव" कार्यान्वयन एक नकली होगा। (या आप इन-मेमरी फाइल सिस्टम के बजाय "डिस्क टू सेव" ऑपरेशन को नकली बना सकते हैं।)
तीसरे उदाहरण के रूप में, एक ऑब्जेक्ट की कल्पना करें जो कैश एपीआई प्रदान करता है; एक ऐसी वस्तु जो सही इंटरफ़ेस को लागू करती है, लेकिन यह केवल कोई कैशिंग नहीं करती है, लेकिन हमेशा कैशे मिस करती है, एक तरह का नकली होगा।
एक नकली का उद्देश्य परीक्षण के तहत प्रणाली के व्यवहार को प्रभावित करना नहीं है , बल्कि परीक्षण के कार्यान्वयन को सरल करना है (अनावश्यक या भारी निर्भरता को हटाकर)।
स्टब्स
एक स्टब एक कार्यान्वयन है जो "अस्वाभाविक" व्यवहार करता है। यह विशिष्ट आउटपुट के साथ विशिष्ट आदानों का जवाब देने के लिए पूर्व-निर्धारित (आमतौर पर परीक्षण सेट-अप) है।
एक स्टब का उद्देश्य आपके सिस्टम को एक विशिष्ट स्थिति में परीक्षण के तहत प्राप्त करना है। उदाहरण के लिए, यदि आप कुछ कोड के लिए एक परीक्षण लिख रहे हैं जो एक REST API के साथ इंटरैक्ट करता है, तो आप कर सकते हैं बाहर ठूंठ REST API का एक API कि हमेशा एक पूर्वनिर्धारित जवाब, या एक विशिष्ट त्रुटि के साथ एक API अनुरोध करने के लिए कि प्रतिक्रिया देता है के साथ। इस तरह से आप परीक्षण लिख सकते हैं जो इस बारे में दावा करता है कि सिस्टम इन राज्यों में कैसे प्रतिक्रिया करता है; उदाहरण के लिए, यदि एपीआई 404 त्रुटि देता है, तो आपके उपयोगकर्ताओं को मिलने वाली प्रतिक्रिया का परीक्षण करना।
एक स्टब आमतौर पर केवल उन सटीक अंतःक्रियाओं पर प्रतिक्रिया करने के लिए कार्यान्वित किया जाता है, जिनके बारे में आपने उसे बताया है। लेकिन प्रमुख विशेषता यह है कि कुछ को एक स्टब बनाता है उद्देश्य है : एक स्टब आपके परीक्षण के मामले को स्थापित करने के बारे में है।
mocks
एक मॉक एक स्टब के समान है, लेकिन सत्यापन के साथ जोड़ा गया है। एक मॉक का उद्देश्य इस बात पर जोर देना है कि परीक्षण के तहत आपकी प्रणाली निर्भरता के साथ कैसे इंटरैक्ट करती है। ।
उदाहरण के लिए, यदि आप एक सिस्टम के लिए एक परीक्षण लिख रहे हैं जो एक वेबसाइट पर फाइलें अपलोड करता है, तो आप एक नकली का निर्माण कर सकते हैं जो एक फ़ाइल को स्वीकार करता है और आप यह दावा करने के लिए उपयोग कर सकते हैं कि अपलोड की गई फ़ाइल सही थी। या, एक छोटे पैमाने पर, यह सत्यापित करने के लिए किसी वस्तु के नकली का उपयोग करना आम है कि परीक्षण के तहत प्रणाली नकली वस्तु के विशिष्ट तरीकों को बुलाती है।
मोक्स इंटरेक्शन टेस्टिंग से बंधे हैं , जो एक विशिष्ट परीक्षण पद्धति है। जो लोग सिस्टम इंटरैक्शन के बजाय सिस्टम स्टेट का परीक्षण करना पसंद करते हैं, अगर सभी में मोक्स का उपयोग संयम से किया जाएगा।
टेस्ट डबल्स
नकली, स्टब और मॉक सभी परीक्षण डबल्स की श्रेणी के हैं । एक परीक्षण डबल किसी भी वस्तु या प्रणाली है जिसे आप किसी और चीज के बजाय एक परीक्षण में उपयोग करते हैं। अधिकांश स्वचालित सॉफ़्टवेयर परीक्षण में किसी प्रकार या किसी अन्य के परीक्षण डबल्स का उपयोग शामिल है। कुछ अन्य प्रकार के परीक्षण युगल में डमी मान , जासूस और I / O ब्लैकहोल शामिल हैं ।