मुझे लगा कि मैं चार और मामले जोड़ूंगा, जहां डेब्यू।आसर सही विकल्प हो सकता है।
1) कुछ ऐसा है जो मैंने यहां नहीं देखा है, अतिरिक्त वैचारिक कवरेज है जो स्वचालित परीक्षण के दौरान Asserts प्रदान कर सकता है । एक साधारण उदाहरण के रूप में:
जब कुछ उच्च-स्तरीय कॉलर को एक लेखक द्वारा संशोधित किया जाता है, जो मानता है कि उन्होंने अतिरिक्त परिदृश्यों को संभालने के लिए कोड के दायरे का विस्तार किया है, तो आदर्श रूप से (!) वे इस नई स्थिति को कवर करने के लिए यूनिट परीक्षण लिखेंगे। यह तब हो सकता है कि पूरी तरह से एकीकृत कोड ठीक काम करने के लिए प्रकट होता है।
हालांकि, वास्तव में एक सूक्ष्म दोष पेश किया गया है, लेकिन परीक्षण के परिणामों में इसका पता नहीं चला है। कैली इस मामले में गैर-निर्धारक बन गया है, और केवल अपेक्षित परिणाम प्रदान करने के लिए होता है। या शायद इसने एक गोल त्रुटि उत्पन्न की है जो किसी का ध्यान नहीं गया था। या एक त्रुटि का कारण है जो समान रूप से कहीं और ऑफसेट था। या न केवल पहुंच का अनुरोध किया, बल्कि अतिरिक्त विशेषाधिकार भी प्रदान किए जाने चाहिए। आदि।
इस बिंदु पर, यूनिट परीक्षणों द्वारा संचालित नए मामले (या किनारे मामले) के साथ युग्मित कैली में शामिल डीबग.एसर्स () स्टेटमेंट्स परीक्षण के दौरान अमूल्य अधिसूचना प्रदान कर सकते हैं कि मूल लेखक की मान्यताओं को अमान्य कर दिया गया है, और कोड नहीं होना चाहिए अतिरिक्त समीक्षा के बिना जारी किया जाए। यूनिट टेस्ट के साथ सही पार्टनर हैं।
2) इसके अतिरिक्त, कुछ परीक्षण लिखने में सरल होते हैं, लेकिन उच्च-लागत और अनावश्यक को शुरुआती मान्यताओं को देखते हुए । उदाहरण के लिए:
यदि किसी ऑब्जेक्ट को केवल एक निश्चित सुरक्षित एंट्री पॉइंट से एक्सेस किया जा सकता है, तो क्या कॉलर के पास अनुमतियाँ हैं यह सुनिश्चित करने के लिए हर ऑब्जेक्ट विधि से नेटवर्क राइट्स डेटाबेस में एक अतिरिक्त क्वेरी की जानी चाहिए? पक्का नहीं। शायद आदर्श समाधान में कैशिंग या सुविधाओं के कुछ अन्य विस्तार शामिल हैं, लेकिन डिजाइन को इसकी आवश्यकता नहीं है। एक डीबग.एजर्स () तुरंत दिखाएगा जब ऑब्जेक्ट को असुरक्षित प्रविष्टि बिंदु से जोड़ा गया है।
3) अगला, कुछ मामलों में आपके उत्पाद में रिलीज़ मोड में तैनात होने पर इसके सभी या इसके संचालन के लिए कोई उपयोगी नैदानिक बातचीत नहीं हो सकती है । उदाहरण के लिए:
मान लीजिए कि यह एक एम्बेडेड रियल-टाइम डिवाइस है। अपवादों को फेंकना और एक विकृत पैकेट से सामना करने पर फिर से शुरू करना काउंटर-उत्पादक है। इसके बजाय डिवाइस को अपने आउटपुट में शोर प्रदान करने के बिंदु तक, सर्वोत्तम-प्रयास संचालन से लाभ हो सकता है। यह भी एक मानव इंटरफ़ेस, लॉगिंग डिवाइस नहीं हो सकता है, या यहां तक कि मानव द्वारा शारीरिक रूप से सुलभ हो सकता है जब रिलीज मोड में तैनात किया जाता है, और त्रुटियों के बारे में जागरूकता एक ही आउटपुट का आकलन करके प्रदान की जाती है। इस मामले में, उदार दावे और पूरी तरह से पूर्व-परीक्षण परीक्षण अपवादों की तुलना में अधिक मूल्यवान हैं।
4) अंत में, कुछ परीक्षण केवल इसलिए अप्रमाणिक हैं क्योंकि कैली को अत्यंत विश्वसनीय माना जाता है । ज्यादातर मामलों में, जितना अधिक पुन: प्रयोज्य कोड होता है, उतना ही अधिक प्रयास इसे विश्वसनीय बनाने में किया जाता है। इसलिए कॉल करने वालों से अनपेक्षित मापदंडों के लिए अपवाद होना आम है, लेकिन कैलेज़ से अनपेक्षित परिणामों के लिए जोर देना। उदाहरण के लिए:
यदि कोई कोर String.Find
ऑपरेशन बताता है -1
कि खोज मानदंड नहीं मिलने पर यह वापस आ जाएगा , तो आप सुरक्षित रूप से तीन के बजाय एक ऑपरेशन करने में सक्षम हो सकते हैं। हालांकि, अगर यह वास्तव में वापस आ गया है -2
, तो आपके पास कार्रवाई का कोई उचित कोर्स नहीं हो सकता है। सरल गणना को एक के साथ प्रतिस्थापित करना अनपेक्षित होगा जो एक -1
मान के लिए अलग से परीक्षण करता है , और कोर लाइब्रेरी को सुनिश्चित करने वाले परीक्षणों के साथ अपने कोड को लिटाने के लिए अधिकांश रिलीज के वातावरण में अनुचित है। इस मामले में Asserts आदर्श हैं।