यह एक महान धागा है, और मुझे @KAndy और @fschmengler दोनों के उत्तर पसंद हैं।
मैं कुछ अतिरिक्त विचार जोड़ना चाहूंगा जो मुझे एक प्रश्न पूछने पर मूल्यवान लगता है जैसे "क्या मुझे एक्स का परीक्षण करना चाहिए?" या "मुझे एक्स का परीक्षण कैसे करना चाहिए?"।
क्या गलत हो सकता था?
- मैं एक गूंगा टाइपो बना सकता है (हर समय होता है)
यह आमतौर पर एक परीक्षा लिखने का औचित्य नहीं रखता है।
- क्या मुझे कोर या एक अलग मॉड्यूल से कोड की आवश्यकता होगी, और फिर इसे अपनी आवश्यकताओं के साथ समायोजित कर सकता हूं?
मुझे लगता है कि यह वास्तव में एक बहुत खतरनाक बात है जो अक्सर सूक्ष्म कीड़े छोड़ देता है। इस मामले में, मैं एक परीक्षण लिखने के पक्ष में हूं, अगर यह बहुत महंगा नहीं है। स्रोत मॉडल विन्यास को वास्तव में बनाना उन्हें अधिक जोखिम भरा IMO बना देगा।
- क्या एक अलग मॉड्यूल के साथ संघर्ष हो सकता है?
यह लगभग केवल कॉन्फ़िगरेशन कोड पर लागू होता है। ऐसे मामले में मुझे एक एकीकरण परीक्षण करना पसंद है जो मुझे बताता है कि ऐसा कब होता है।
- क्या Magento भविष्य में रिलीज़ में API बदल सकता है?
इस मामले में बहुत संभावना नहीं है, क्योंकि आपका कोड केवल एक इंटरफ़ेस पर निर्भर करता है। लेकिन अधिक ठोस कक्षाएं शामिल हैं या यदि मेरा कोड एक मुख्य वर्ग का विस्तार करता है, तो यह संभावित जोखिम का अधिक हो जाता है।
- एक नया PHP संस्करण मेरे कोड को तोड़ सकता है। या शायद मैं आने वाले वर्षों के लिए PHP 5.6 का समर्थन करना चाहता हूं।
फिर से, यहाँ अत्यधिक संभावना नहीं है, लेकिन कुछ मामलों में मुझे चेतावनी देने के लिए एक परीक्षण चाहिए, क्या मुझे असंगत सिंटैक्स का उपयोग करने के लिए भविष्य में कोड बदलना चाहिए।
कोड का परीक्षण करना कितना महंगा है?
इसके दो पहलू हैं:
- परीक्षण लिखने के लिए प्रयास और समय की मात्रा
- कोड के टुकड़े का परीक्षण करने के लिए प्रयास और समय की मात्रा मैं मैन्युअल रूप से लिखने वाला हूं।
कोड के कुछ टुकड़े के विकास के दौरान, मैं उस कोड को चलाने के लिए तैयार होता हूं जो मैं अक्सर लिखता हूं जब तक कि मैं इसे पूरा नहीं करता। यह निश्चित रूप से एक इकाई परीक्षण के साथ बहुत आसान है।
आपके मामले में एक परीक्षण लिखना सस्ता मर चुका है। इसमें ज्यादा समय या प्रयास नहीं लगता है। @ शक सही है कि सभी कोड बनाए रखने की जरूरत है, लेकिन फिर से, सभी परीक्षणों को रखने की आवश्यकता नहीं है।
यह एक उदाहरण हो सकता है जहां मैं एक इकाई परीक्षण लिखूंगा, बस यह जांचने के लिए कि मैं गूंगा गलती नहीं करता हूं, और कक्षा समाप्त होने के बाद इसे हटा दें। यदि कोई परीक्षण दीर्घकालिक मूल्य प्रदान नहीं करता है, तो मुझे लगता है कि उन्हें हटाने से समझ में आता है।
यह प्रश्न लिखने के लिए परीक्षण के प्रकार को चुनने के संदर्भ में भी महत्वपूर्ण है: उदाहरण के लिए इकाई या एकीकरण।
मैं जो कोड लिख रहा हूं, वह कितना मूल्यवान है?
यदि एक कोड का एक टुकड़ा जो मैं लिख रहा हूं वह उस सेवा के लिए आवश्यक है जो एक मॉड्यूल प्रदान करता है, मैं इसे परीक्षण करता हूं, भले ही यह कितना तुच्छ हो।
यदि यह सिर्फ एक छोटी सी उपयोगिता विधि है, उदाहरण के लिए यूआई केंद्रित है, और व्यापार तर्क का हिस्सा नहीं है, तो शायद नहीं।
क्या कोड को बदलना होगा?
समय के साथ-साथ मुझे टेस्ट कवरेज करने की आदत हो गई है, इसलिए खुला कोड बदलना बहुत असुरक्षित लगता है। इसमें इतनी सरल चीजें शामिल हैं जैसे एक स्रोत मॉडल में एक विकल्प जोड़ना, लेकिन एक वर्ग को एक अलग फ़ोल्डर / नामस्थान में स्थानांतरित करने या एक विधि का नाम बदलने जैसी चीजें भी हैं।
इस तरह के बदलावों के लिए परीक्षण करना अमूल्य है।
क्या इसे प्रलेखन की आवश्यकता है?
कोड का उपयोग करना कितना कठिन है? आपके उदाहरण में यह तुच्छ है, लेकिन कुछ और जटिल मामलों में, परीक्षण करना अन्य डेवलपर्स के लिए प्रलेखन उद्देश्यों के लिए बहुत अच्छा है (या कुछ महीनों में खुद)।
अन्वेषण और अधिगम
यदि मैं कुछ कोड पर काम कर रहा हूं और मुझे यकीन नहीं है कि इसे कैसे परीक्षण किया जाए, तो मुझे परीक्षण लिखने के लिए बहुत मूल्यवान लगता है। प्रक्रिया लगभग हमेशा मुझे एक गहरी समझ देती है कि मैं किसके साथ काम कर रहा हूं।
यह उन डेवलपर्स के लिए विशेष रूप से सच है जो अभी भी खुद को परीक्षण सीखने पर विचार करते हैं।
यह भी एक उदाहरण है जहां यह बाद में परीक्षण को हटाने के लिए समझ में आता है, क्योंकि यह प्रदान किया गया मुख्य मूल्य सीख रहा था।
अनुशासन और तनाव
लाल-हरा-रिफलेक्टर लूप से चिपकना मुझे तेजी से जाने में मदद करता है। यह दबाव में विशेष रूप से सच है। इसलिए, भले ही कोड का कुछ टुकड़ा वास्तव में परीक्षण योग्य न हो, फिर भी मैं TDD का पालन कर सकता हूं, खासकर यदि कोड परीक्षण करने के लिए तुच्छ हो।
यह मुझे प्रवाह और चेतावनी में रखता है।
क्या और कैसे परीक्षण करें?
यह भी विचार करें कि आप परीक्षण को बहुत अलग ग्रैन्युलैरिटी में लिख सकते हैं।
- सटीक रिटर्न मान का परीक्षण।
यह एक बहुत ही कठोर परीक्षण होगा जिसे हर परिवर्तन के साथ समायोजित करना होगा। क्या आप चाहते हैं कि परीक्षण टूट जाए, उदाहरण के लिए, यदि रिटर्न ऐरे में वस्तुओं का क्रम बदलता है?
- रिटर्न वैल्यू की संरचना का परीक्षण।
स्रोत मॉडल के लिए यह प्रत्येक उप-सरणी को दो रिकॉर्ड के रूप में जाँच सकता है, एक के साथ label
और एक के साथvalue
कुंजी के ।
- क्लास के इम्प्लाइज़ की जाँच करना
ArrayInterface
।
- कक्षा का परीक्षण प्रदान करता है,
getOptions()
भले ही वह तरीका कार्यान्वित इंटरफ़ेस का हिस्सा न हो।
प्रत्येक संभावित चीज के लिए जिसका परीक्षण किया जा सकता है, मूल्य, रखरखाव और लागत पर विचार करें।
सारांश
इसे सम्मिलित करने के लिए: किसी प्रश्न का कोई सही एकल उत्तर नहीं है कि क्या किसी कोड का परीक्षण किया जाना चाहिए या नहीं। परिस्थितियों के आधार पर प्रत्येक डेवलपर के लिए उत्तर अलग-अलग होगा।