मुझे नकली वस्तुओं का उपयोग कब करना चाहिए?


14

मैंने TDD के बारे में बहुत सी बातें पढ़ी हैं लेकिन मुझे अभी भी संदेह है। उदाहरण के लिए, मेरे पास ये वर्ग चित्र हैं:

यहाँ छवि विवरण दर्ज करें

यह एक सरल उदाहरण है, बस टीडीडी और नकली वस्तुओं के बारे में जानने के लिए।

मुझे कौन सा टेस्ट पहले लिखना चाहिए? उत्पाद , फिर लाइन और आखिरी, ऑर्डर ? यदि मैं ऐसा करता हूं, तो क्या मुझे ऑर्डर का परीक्षण करने के लिए लाइन और उत्पाद का उपयोग करना चाहिए या क्या मुझे नकली वस्तुओं का उपयोग करना चाहिए? मुझे मॉक ऑब्जेक्ट्स का उपयोग कब करना चाहिए? क्या मुझे XP और TDD के साथ UML का उपयोग करना चाहिए?

मुझे ये चीजें अभी तक नहीं मिली हैं।

जवाबों:


10

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

आपको नकली वस्तुओं का उपयोग करने की आवश्यकता है या नहीं यह परीक्षण किए गए वर्ग की वास्तविक निर्भरता पर निर्भर करता है। यदि ये सरल वर्ग हैं जो आप आसानी से अपने परीक्षणों के लिए आवश्यक किसी भी वांछित डेटा / स्थिति के साथ त्वरित रूप से सेट अप और सेट कर सकते हैं, तो आपको मोक्स की आवश्यकता नहीं है। (यह आपके उदाहरण के डिजाइन के लिए यहाँ मामला लगता है।) हालाँकि, अगर किसी भी निर्भरता को प्रारंभ करना / करना निर्भर करना मुश्किल है, और इसके अवांछनीय दुष्प्रभाव हैं / बाहरी संसाधन जैसे DB पर निर्भर करता है, तो यह समझ में आता है। इसके बजाय एक नकली वस्तु का उपयोग करने के लिए।


जैसा कि मैंने पहले कहा, यह एक सरल परिदृश्य था, बस टीडीडी और मॉक ऑब्जेक्ट्स के बारे में जानने के लिए ... एक महान जवाब, धन्यवाद। और यूएमएल के बारे में क्या? क्या मुझे इससे बचना चाहिए?

@thomas, UML से बचने की कोई आवश्यकता नहीं है, यह टीडीडी के साथ संघर्ष नहीं करता है। यूएमएल डिजाइन मुद्दों को देखने / संचार करने के लिए बहुत अच्छा है। यह कुछ विकास चरणों में अत्यंत उपयोगी हो सकता है। हालांकि, डिजाइन विकसित होता है, और कोड के साथ एक सुंदर और विस्तृत यूएमएल सिस्टम आरेख रखने की कोशिश करना जल्दी से बोझ बन सकता है। तो इसे दूर फेंकने के लिए याद रखें जब आपको इसकी आवश्यकता नहीं होती है :-)
पेटर टॉरक

1
@thomas, यहाँ कन्वेंशन btw है उत्तर को आप उपयोगी पाते हैं, उत्तर के बगल में अप एरो पर क्लिक करके :-)
Péter Tööök

4

मैं यहाँ नकली वस्तुओं की ज्यादा जरूरत नहीं देखता। जैसा कि दूसरों द्वारा बताया गया है, आपको ज्यादातर उन लोगों की आवश्यकता है यदि निर्भरता स्थापित करना मुश्किल है।

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


2

आम तौर पर परीक्षण के लिए आप परीक्षण के तहत सिस्टम / ऑब्जेक्ट को अलग करना चाहते हैं, इसलिए आप उस चीज का मजाक उड़ाएंगे जो उस के बाहर है। इसलिए अपने क्लास डायग्राम का उपयोग करते हुए, ऑर्डर ऑब्जेक्ट का परीक्षण करते समय, लाइन ऑब्जेक्ट के लिए एक मॉक का उपयोग करें। रेखा का परीक्षण करते समय, ऑर्डर और उत्पाद के लिए एक नकली का उपयोग करें। उत्पाद का परीक्षण करते समय, लाइन के लिए मॉक का उपयोग करें।


चूंकि उत्पाद लाइन पर निर्भर नहीं करता है, इसलिए वहां लाइन के लिए मॉक का उपयोग करने की कोई आवश्यकता नहीं है (न ही कोई तरीका)। लाइन और ऑर्डर के लिए भी।
Péter Török

2

"टीडीडी मुख्य रूप से एक डिजाइन तकनीक है, जो यह सुनिश्चित करने के एक साइड इफेक्ट के साथ है कि आपका स्रोत कोड पूरी तरह से इकाई परीक्षण किया गया है" - स्कॉट डब्ल्यू एंबलर

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

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


2
मेरे पास बस एक साधारण वर्ग आरेख है ...

-1 तो डिजाइन के बारे में सोचना (एक वर्ग आरेख को नीचे करना सहित) आपको टीडीडी करने से रोकता है? जो सीधे सादे गलत लगता है।
बंजर फ्रेंड-हैनसेन

1
@bjarkef: कृपया मेरा जवाब फिर से पढ़ें। यदि डिज़ाइन अंतिम है, तो आप वास्तव में डिज़ाइन को बाहर निकालने के लिए TDD का उपयोग नहीं कर सकते, जो कि TDD के बारे में है। और मुझे लगता है कि यह वही है जो ओपी को भ्रमित करता है: उसके पास पहले से ही एक समाधान है, और अब इसके लिए परीक्षण लिखने की कोशिश कर रहा है। "मुझे कौन से परीक्षण पहले लिखना चाहिए, उत्पाद या ऑर्डर"। यदि आप पहले परीक्षण लिखते हैं तो यह प्रश्न वास्तव में प्रासंगिक नहीं है।
मार्टिन विकमैन

आप कैसे निर्धारित करते हैं कि डिजाइन बिना किसी परीक्षण या उत्पादन कोड के अंतिम है? यह मानते हुए कि आप कुछ ऐसा बनाना चाहते हैं जो काम करे।
जेएफओ

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