स्वचालित परीक्षण के बारे में एक बात यह है कि आपको परीक्षण योग्य होने के लिए कोड लिखना आवश्यक है। यह अपने आप में और (वास्तव में यह अच्छा है क्योंकि यह बहुत सारी प्रथाओं को हतोत्साहित करता है कि एक नियम के रूप में बचा जाना चाहिए) को हतोत्साहित करना कोई बुरी बात नहीं है, लेकिन अगर आप मौजूदा कोड में इकाई परीक्षण लागू करने की कोशिश कर रहे हैं तो संभावना नहीं है एक परीक्षण योग्य तरीके से लिखा गया है।
सिंगलटन, स्टैटिक मेथड्स, रजिस्ट्रियां, सर्विस लोकेटर वगैरह जैसी चीजें निर्भरता को खत्म करने में बहुत मुश्किल होती हैं। कानून के कानून के उल्लंघन का मतलब है कि आपके कोड आधार के कई हिस्सों को आपके कोडबेस फ़ंक्शन के अन्य भागों के बारे में बहुत अधिक पता है, जो आगे छिपी निर्भरता को पेश करता है जिसे तोड़ना मुश्किल हो सकता है। इन सभी चीजों से एक मॉड्यूल को कोड बेस के बाकी हिस्सों से अलग करना मुश्किल हो जाता है, और यदि आप अलगाव में अपने मॉड्यूल का परीक्षण नहीं कर सकते हैं, तो यूनिट परीक्षण उनके मूल्य का एक बहुत कुछ खो देते हैं। यदि कोई परीक्षण विफल हो जाता है, तो परीक्षण के तहत इकाई में कोई दोष होने के कारण, या उसके किसी एक निर्भरता में दोष के कारण, या शायद यह इसलिए है क्योंकि डेटा जो एक आश्रित डेटा स्रोत के माध्यम से खींचा जा रहा है, वैसा नहीं है जैसा कि परीक्षण के लेखक को अपेक्षित था ? यदि आप'
अधिकांश कोडबेस मैंने देखे हैं जो यूनिट टेस्टिंग को ध्यान में रखकर नहीं बनाए गए हैं, वे स्वाभाविक रूप से अस्थिर होते हैं, क्योंकि कोडर्स कोड काम को बनाने पर ध्यान केंद्रित करते हैं क्योंकि उन्हें उम्मीद है कि युग्मन ढीले और निर्भरता को बनाए रखने के लिए आवश्यक कार्य करने के बजाय स्पष्ट होना चाहिए । कोड जिसे मन में यूनिट परीक्षण के साथ लिखा गया था, बहुत अलग दिखता है।
बहुत सारे लोग इकाई परीक्षण के लिए एक भोली दृष्टिकोण लेते हैं जब वे पहली बार ऐसा करना शुरू करते हैं, तो उन्हें लगता है कि वे बस एक मौजूदा कोडबेस के लिए परीक्षणों का भार लिख सकते हैं और सभी अच्छे होंगे, लेकिन यह इस तरह से कभी भी काम नहीं करता है उपर्युक्त मुद्दे। वे यह पता लगाना शुरू कर देते हैं कि उन्हें यूनिट परीक्षणों में सेटअप की अमानवीय मात्रा प्राप्त करने के लिए उन्हें सभी पर चलना होगा, और परिणाम अक्सर संदिग्ध होते हैं क्योंकि कोड में अलगाव की कमी का मतलब है कि आप नीचे ट्रैक नहीं कर सकते कि क्या परीक्षण विफलता का कारण बना। वे "चतुर" परीक्षण लिखने की कोशिश करना भी शुरू कर देते हैं जो सिस्टम के काम करने के कुछ अत्यधिक सार पहलू को प्रदर्शित करता है। यह विफल हो जाता है क्योंकि "चतुर" इकाई परीक्षण अपने आप में बग का एक संभावित स्रोत है। क्या परीक्षण मॉड्यूल में बग के कारण परीक्षण विफल हो गया, या परीक्षण में एक बग के कारण? एक परीक्षण इतना सरल होना चाहिए कि वहाँ कोई संभावना नहीं है कि एक बग उसमें छिपा हो सकता है। वास्तव में सर्वश्रेष्ठ परीक्षण शायद ही कभी 2 रेखाओं से अधिक लंबे होते हैं, पहली पंक्ति कुछ करने के लिए परीक्षण के तहत इकाई को निर्देश देती है, दूसरा यह दावा करता है कि उसने जो किया वह अपेक्षित था।
यदि आपकी टीम इकाई परीक्षण को अपनाने के लिए गंभीर है तो मौजूदा परियोजना के साथ शुरू करना नासमझी होगी। आपकी टीम की मौजूदा परियोजनाएं प्रमुख रिफैक्टरिंग के बिना शायद अस्थिर हैं। इकाई परीक्षण के बारे में सीखने के आधार के रूप में एक नई परियोजना का उपयोग करने से आप बेहतर हैं, क्योंकि आपके पास काम करने के लिए एक साफ स्लेट है। आप सिंगल कोड, रजिस्ट्रियों और ऐसी अन्य छिपी निर्भरता पर निर्भरता इंजेक्शन के पक्ष में नए कोड बेस को डिजाइन कर सकते हैं, आप इसे कार्यान्वयन के बजाय इंटरफेस पर निर्भर करने के लिए लिख सकते हैं और इसी तरह। आप कर सकते हैं (और चाहिए) के साथ परीक्षणों को लिखने के साथ-साथ कोड का परीक्षण भी किया जा रहा है, परीक्षण लिखने के बाद इकाई परीक्षण में परिणाम होता है जो यह सुनिश्चित करता है कि परीक्षण किया गया मॉड्यूल वह करता है जो आपको लगता है कि ऐसा करने के बजाय इसका मतलब यह हो सकता है कि यह परीक्षण करता है। चश्मा क्या कहता है इसे करना चाहिए।
एक बार जब आप इकाई परीक्षण के साथ कुछ आत्मविश्वास प्राप्त कर लेते हैं, तो आपकी टीम संभवतः अपने मौजूदा कोड की खामियों को महसूस करना शुरू कर देगी जो इकाई परीक्षणों के लिए बाधा बनने वाली हैं। यह तब है जब आप इसे और अधिक परीक्षण योग्य बनाने के लिए मौजूदा कोड को रिफलेक्टर करने के लिए काम करना शुरू कर सकते हैं। महत्वाकांक्षी मत बनो और एक बार में यह सब करने का प्रयास करें, या एक ऐसी प्रणाली को बदलने का प्रयास करें जो पूरी तरह से एक नए के साथ काम करती है, बस कोडबेस के बिट्स को खोजने से शुरू करें जिन्हें आसानी से परीक्षण किया जा सकता है (जिनके पास नहीं है कोई भी निर्भरता या जहां निर्भरता स्पष्ट है) और उन लोगों के लिए परीक्षण लिखें। मुझे पता है कि मैंने कहा कि कोड लिखने के साथ-साथ परीक्षण लिखना बेहतर है, लेकिन यहां तक कि बाद में लिखे गए परीक्षण का अभी भी प्रारंभिक बिंदु के रूप में मूल्य है। परीक्षणों को ऐसे लिखें जैसे कि आप जानते हैं कि वर्ग इसके अलावा क्या काम करता है इसके विनिर्देशों के अनुसार इसे क्या करना चाहिए। जब आप परीक्षण चलाते हैं और विफलताएं मिलती हैं, तो या तो चश्मा या कार्यान्वयन गलत है। यह निर्धारित करने के लिए दोनों की जांच करें कि कौन सा गलत है और तदनुसार परीक्षण या कोड को अपडेट करें।
एक बार जब आप कम लटका हुआ फल उठा लेते हैं, तो आपका असली काम शुरू हो जाता है। आपको अपने कोडबेस में छिपे हुए आश्रितों को ढूंढना शुरू करना होगा और उन्हें ठीक करना होगा, एक बार में। इस बिंदु पर अति-महत्वाकांक्षी मत बनो, बस एक समय में एक मॉड्यूल करने के लिए छड़ी, या यहां तक कि एक मॉड्यूल में सिर्फ एक ही मुद्दा है, जब तक कि परीक्षण की बाधाएं तय नहीं हो जाती हैं और आप अगले बिट पर आगे बढ़ सकते हैं।
TL: DR: अधिकांश लोगों को लगता है कि परीक्षण आसान है और आप मौजूदा कोड में परीक्षणों को आसानी से वापस कर सकते हैं। ये दोनों धारणाएं गलत हैं। यदि आप इन दोनों तथ्यों को ध्यान में रखते हुए अपनी परियोजनाओं में इकाई परीक्षण कराने के लिए किसी परियोजना को अपनाते हैं तो आपके सफल होने की संभावना अधिक होती है।