मैंने जॉन रॉबिन्स द्वारा 'डीबगिंग एमएस नेट 2.0 एप्लीकेशन' को स्किमिंग करना शुरू कर दिया है, और डीबग.एस्र्ट (...) के लिए अपने सुसमाचार प्रचार से भ्रमित हो गए हैं।डीबग.एस्र्ट बनाम विशिष्ट थ्रोउन अपवाद
वे बताते हैं कि अच्छी तरह से लागू किया राज्य की दुकान दावा कुछ हद तक, एक त्रुटि हालत का, जैसे:
Debug.Assert(i > 3, "i > 3", "This means I got a bad parameter");
अब, व्यक्तिगत रूप से, यह मेरे लिए पागल है कि वह तो अपने परीक्षण restating प्यार करता है एक के बिना लगता है वास्तविक समझदार 'व्यापार तर्क' टिप्पणी, शायद "i < = 3 flobittyjam widgitification प्रक्रिया के कारण कभी नहीं होना चाहिए"।
तो, मुझे लगता है कि मुझे आचरण निम्न स्तर के रूप में मिलता है "चलो मेरी धारणाओं की रक्षा करें" चीज ... मानते हैं कि किसी को लगता है कि यह एक परीक्षण है जिसे केवल डीबग में करना है - यानी आप सहकर्मी और भावी प्रोग्रामर के खिलाफ खुद की रक्षा करना, और उम्मीद है कि वे वास्तव में चीजों का परीक्षण करते हैं।
लेकिन मुझे जो नहीं मिलता है, वह तब कहता है कि आपको सामान्य त्रुटि प्रबंधन के अलावा दावे का उपयोग करना चाहिए; अब मैं इस पर कुछ विचार कर रहा हूं:
Debug.Assert(i > 3, "i must be greater than 3 because of the flibbity widgit status");
if (i <= 3)
{
throw new ArgumentOutOfRangeException("i", "i must be > 3 because... i=" + i.ToString());
}
मुझे डीबग द्वारा प्राप्त किया गया है। त्रुटि स्थिति परीक्षण की पुन: पुनरावृत्ति? मुझे लगता है कि मैं अगर हम डिबग-केवल एक बहुत ही महत्वपूर्ण गणना की दो बार जांच के बारे में बात कर रहे थे इसे पाने होगी ...
double interestAmount = loan.GetInterest();
Debug.Assert(debugInterestDoubleCheck(loan) == interestAmount, "Mismatch on interest calc");
... लेकिन मैं पैरामीटर परीक्षण जो निश्चित रूप से लायक हैं के लिए यह नहीं मिलता है जांच (दोनों DEBUG और रिलीज बिल्ड में) ... या नहीं। मैं क्या खो रहा हूँ?
दावे * आंतरिक * विधि कॉल के पैरामीटर की जाँच के तरीकों (एक ही घटक से संबंधित कोड द्वारा कहा जाता है) के लिए इस्तेमाल किया जा सकता है, के रूप में बाहरी विधि कॉल (एक और घटक द्वारा कहा जाता है) करने का विरोध किया । उदाहरण के लिए, मैं जोर दे सकता हूं कि टाइप डबल का एक निजी विधि पैरामीटर NaN नहीं है। – RoadWarrior
@ क्रिस: आप बताते हैं कि मानदंड पैरामीटर जांच के लिए उपयोग नहीं किया जाना चाहिए। क्या इसका कोई कारण है? जब मैं निर्भर वस्तुओं को इंजेक्ट करता हूं तो मैं विशेष रूप से रचनाकारों में पैरामीटर चेक के लिए अपवाद फेंक देता हूं। हालांकि मुझे Assertions का उपयोग करने के लिए कहा जा रहा है। मेरे पास दावे के बजाय अपवादों का उपयोग करने के लिए तार्किक स्पष्टीकरण नहीं है। क्या आप स्पष्टीकरण में सक्षम हैं? चीयर्स –
चिंता मत करो मुझे पता चला क्यों। जॉन स्कीट के मुताबिक, http://stackoverflow.com/questions/1276308/exception-vs-assertion: "अपने कोड के भीतर आंतरिक तर्क जांच के लिए दावे का उपयोग करें, और अपने तत्काल कोड के नियंत्रण के बाहर त्रुटि स्थितियों के लिए सामान्य अपवाद।" –