क्या आप लोग कहते हैं कि मैक्स का उपयोग मोजे का उपयोग न करने से बेहतर है?
कार चलाने से मोटरबाइक बेहतर चल रहा है? यह निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं :)।
मैक्स का उपयोग क्यों करें?
मैक्स बनाम राज्य-आधारित परीक्षण: जबकि मुझे आम तौर पर राज्य-आधारित परीक्षण पसंद है क्योंकि यह अधिक ठोस/सीधे आगे लगता है, अक्सर यह मामला है कि मोजे का उपयोग करना यह सत्यापित करने का एकमात्र तरीका है कि कोड की एक इकाई इसकी भूमिका निभाती है सही ढंग से। क्यूं कर? खैर, tell, don't ask principle के साथ दिमाग में डिजाइन करते समय, कक्षाएं अक्सर आपकी अपेक्षाओं को सत्यापित करने के लिए पर्याप्त डेटा का पर्दाफाश नहीं करती हैं, इसलिए इसे सही तरीके से काम करने की पुष्टि करने का एकमात्र तरीका अन्य सहयोगियों के साथ अपने व्यवहार/बातचीत की जांच करना है।
एक अच्छा उदाहरण एक वर्ग है जो ऑर्डर को अंतिम रूप देने पर ईमेल भेजता है - कक्षा में "ईमेल की संख्या नहीं भेजा गया" संपत्ति या कुछ भी समान नहीं होगा, इसलिए आपको यह जांचना होगा कि उचित विधि कॉल किया गया था । मोक्स बातचीत पर उम्मीदों को सेट।
जबकि आप इस डेटा का खुलासा करने वाले अपने स्वयं के परीक्षण डबल वर्गों को हाथ से रोल करके इंटरैक्शन का परीक्षण कर सकते हैं (उदाहरण के लिए एक प्रकार का निर्माण करें जो आवश्यक इंटरफ़ेस लागू करता है, फिर सूची में कॉल कॉल जानकारी को पुश करें, फिर संग्रहित स्थिति के खिलाफ जोर दें) , ढांचे के ढांचे से हम प्रक्रिया को तेज करते हैं जिससे हम केवल उन बिट्स को भरने की इजाजत देते हैं जिनकी हम वास्तव में परवाह करते हैं।
क्या मुझे उत्पादन कोड में मोजे का उपयोग करना चाहिए?
केवल इकाई परीक्षण में इस्तेमाल किया है ठट्ठा करके या यह असली वस्तु के रूप में मूल परियोजना में सीधे इस्तेमाल किया जा सकता है और बाद यह स्विच?
"मजाक" द्वारा आप एक "एक 'झूठे' प्रकार है कि में बदली जा सकती है और एक समझदार तरीके से व्यवहार" का उपयोग मतलब है, तो हाँ - मैं अक्सर उपयोग किया है इस तरह के एक के रूप में 'झूठे' प्रकार मेमोरी डिक्शनरी में डाटाबेस कनेक्शन के लिए विकल्प और आगे। वे गैर-लाइव उत्पादन कोड में उपयोगी स्टॉपगैप के रूप में कार्य कर सकते हैं।
इसी तरह, यदि आप एक इंटरफ़ेस पर प्रोग्राम करते हैं, तो आप एक कार्यक्षमता के साथ एक अनुप्रयोग के कामकाजी कंकाल बना सकते हैं। यह विवरण पर ध्यान केंद्रित किए बिना पूर्ण प्रोग्रामिंग संरचना को बाहर निकालने में मदद करता है। एक बार यह उपलब्ध होने के बाद आप वास्तविक कार्यान्वयन में प्रतिस्थापित कर सकते हैं (हालांकि यदि आप एकीकरण परीक्षणों का समर्थन नहीं करते हैं तो कुछ एकीकरण त्रुटियों की अपेक्षा करें)।
यदि दूसरी तरफ, "मॉकिंग" से आपका मतलब है "उत्पादन कोड में एक मॉकिंग फ्रेमवर्क का उपयोग करना", तो नहीं - मैं ऐसा करने की अनुशंसा नहीं करता, मैं नकली कार्यान्वयन को हाथ से लिखूंगा और निर्भरता से मुक्त रहें, साथ ही इसके बारे में तर्क और डीबग करना आसान होगा।
मोज़े के साथ दूसरी आसान चीज - वे वास्तविक चीज़ की तुलना में अक्सर बहुत तेज़ी से स्थापित होते हैं (विशेष रूप से यदि कहें, वास्तविक चीज़ डीबी-बंधी है), परीक्षणों को बहुत तेज़ी से चलाना। – Amber
बहुत सच है। अच्छा जोड़ा – hvgotcodes
जब आप कहते हैं कि मुझे कभी भी वास्तविक कार्यान्वयन के रूप में नकली का उपयोग नहीं करना चाहिए, तो आपका मतलब है कि मुझे केवल उस वास्तविक चीज़ के बाहर एक नकली का उपयोग करना चाहिए, जिसे मैं परीक्षण करना चाहता हूं, या सिर्फ मुझे अंतिम उत्पाद के रूप में नकली का उपयोग नहीं करना चाहिए - जो स्पष्ट रूप से है नहीं। का कहना है कि मेरे पास कक्षा ए में एक असली विधि है जिसे क्लास बी में वास्तविक विधि को कॉल करना चाहिए, कक्षा बी में कक्षा बी को नकली करने के लिए ठीक है, या मुझे टेस्टक्लास में इसका परीक्षण करना चाहिए और असली कक्षा ए और सेटअप करना चाहिए मॉक क्लास बी – Arturo