एकीकरण परीक्षण बनाम इकाई परीक्षण का निर्णायक लाभ क्या है?
वह झूठा द्वैतवाद है।
यूनिट परीक्षण और एकीकरण परीक्षण दो समान हैं, लेकिन अलग-अलग उद्देश्य हैं। इकाई परीक्षण का उद्देश्य यह सुनिश्चित करना है कि आपके तरीके काम करते हैं। व्यावहारिक रूप से, यूनिट परीक्षण यह सुनिश्चित करते हैं कि कोड यूनिट परीक्षणों द्वारा उल्लिखित अनुबंध को पूरा करता है। यह इस तरह से स्पष्ट है कि इकाई परीक्षण तैयार किए गए हैं: वे विशेष रूप से बताते हैं कि कोड क्या करना चाहिए, और यह दावा करता है कि कोड ऐसा करता है।
एकीकरण परीक्षण अलग हैं। एकीकरण परीक्षण सॉफ्टवेयर घटकों के बीच बातचीत का अभ्यास करते हैं। आपके पास ऐसे सॉफ़्टवेयर घटक हो सकते हैं जो उनके सभी परीक्षणों को पास करते हैं और फिर भी एकीकरण परीक्षणों को विफल करते हैं क्योंकि वे ठीक से बातचीत नहीं करते हैं।
हालांकि, अगर यूनिट परीक्षणों के लिए एक निर्णायक लाभ है, तो यह है: यूनिट परीक्षण स्थापित करना बहुत आसान है, और एकीकरण परीक्षणों की तुलना में बहुत कम समय और प्रयास की आवश्यकता होती है। जब ठीक से उपयोग किया जाता है, तो यूनिट परीक्षण "टेस्टेबल" कोड के विकास को प्रोत्साहित करते हैं, जिसका अर्थ है कि अंतिम परिणाम अधिक विश्वसनीय, समझने में आसान और बनाए रखने में आसान होने वाला है। परीक्षण योग्य कोड में कुछ विशेषताएं होती हैं, जैसे एक सुसंगत एपीआई, दोहराए जाने वाले व्यवहार, और यह परिणाम देता है जो मुखर करना आसान है।
एकीकरण परीक्षण अधिक कठिन और अधिक महंगे हैं, क्योंकि आपको अक्सर विस्तृत मॉकिंग, जटिल सेटअप और कठिन अभिकथन की आवश्यकता होती है। सिस्टम एकीकरण के उच्चतम स्तर पर, एक UI में मानव इंटरैक्शन को अनुकरण करने की कोशिश कर रहा है। संपूर्ण सॉफ्टवेयर सिस्टम स्वचालन के उस प्रकार के लिए समर्पित हैं। और यह स्वचालन है कि हम बाद में हैं; मानव परीक्षण पुन: प्रयोज्य नहीं है, और स्वचालित परीक्षण नहीं करता है।
अंत में, एकीकरण परीक्षण कोड कवरेज के बारे में कोई गारंटी नहीं देता है। कोड लूप, स्थितियों और शाखाओं के कितने संयोजन आप अपने एकीकरण परीक्षणों के साथ परीक्षण कर रहे हैं? क्या आप वास्तव में जानते हैं? ऐसे उपकरण हैं जो आप परीक्षण के तहत यूनिट परीक्षणों और विधियों के साथ उपयोग कर सकते हैं जो आपको बताएंगे कि आपके पास कितना कोड कवरेज है, और आपके कोड की चक्रीय जटिलता क्या है। लेकिन वे वास्तव में केवल विधि के स्तर पर अच्छी तरह से काम करते हैं, जहां इकाई परीक्षण रहते हैं।
यदि आपके परीक्षण हर बार आपके रिफ्लेक्टर में बदल रहे हैं, तो यह एक अलग समस्या है। इकाई परीक्षणों को आपके सॉफ़्टवेयर द्वारा किए गए दस्तावेज़ों के बारे में माना जाता है, जिससे यह साबित होता है कि यह ऐसा करता है, और फिर यह साबित करते हुए कि यह तब होता है जब आप अंतर्निहित कार्यान्वयन को फिर से रिफ्लेक्टर करते हैं। यदि आपका API बदलता है, या आपको सिस्टम डिज़ाइन में परिवर्तन के अनुसार बदलने के लिए आपके तरीकों की आवश्यकता है, तो ऐसा होना चाहिए। यदि यह बहुत हो रहा है , तो कोड लिखने से पहले अपने परीक्षणों को लिखने पर विचार करें। यह आपको समग्र वास्तुकला के बारे में सोचने के लिए मजबूर करेगा, और आपको पहले से स्थापित एपीआई के साथ कोड लिखने की अनुमति देगा।
यदि आप बहुत समय तुच्छ कोड के लिए यूनिट परीक्षण लिखने की तरह खर्च कर रहे हैं
public string SomeProperty { get; set; }
तो आपको अपने दृष्टिकोण को फिर से जांचना चाहिए। यूनिट टेस्टिंग को व्यवहार का परीक्षण करना है, और ऊपर कोड की लाइन में कोई व्यवहार नहीं है। हालाँकि, आपने कहीं न कहीं अपने कोड में एक निर्भरता बनाई है, क्योंकि वह संपत्ति लगभग निश्चित रूप से आपके कोड में कहीं और संदर्भित होने वाली है। ऐसा करने के बजाय, लेखन विधियों पर विचार करें जो आवश्यक संपत्ति को एक पैरामीटर के रूप में स्वीकार करते हैं:
public string SomeMethod(string someProperty);
अब आपकी विधि में स्वयं के बाहर किसी चीज पर निर्भरता नहीं है, और यह अब अधिक परीक्षण योग्य है, क्योंकि यह पूरी तरह से आत्म-निहित है। दी, आप हमेशा ऐसा करने में सक्षम नहीं होंगे, लेकिन यह आपके कोड को अधिक परीक्षण योग्य होने की दिशा में आगे बढ़ाता है, और इस बार आप वास्तविक व्यवहार के लिए एक इकाई परीक्षण लिख रहे हैं।