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