2010-02-22 14 views
6

तो मुझे लगता है कि आर्टर्ट में दर्जनों विधियां हैं जो अनिवार्य रूप से वही काम करती हैं।"आर्टर्ट" कक्षा में इतने सारे अनावश्यक तरीके क्यों हैं? प्रत्येक का इस्तेमाल कब किया जाना चाहिए?

Assert.IsFalse( a == b); 
Assert.IsTrue(  a != b); 
Assert.AreNotEqual(a, b); 

क्यों? क्या यह सिर्फ अधिक स्पष्ट होना है? विभिन्न विधियों का उपयोग कब किया जाना चाहिए? क्या कोई अपमानजनक सर्वोत्तम अभ्यास दस्तावेज है?

उत्तर

8

IsFalse और IsTrue के बीच का अंतर पठनीयता है। AreNotEqual परीक्षण विफल होने पर एक बेहतर त्रुटि संदेश प्रस्तुत करने की अनुमति देता है। उदाहरण के लिए IsTrue सिर्फ आपको बताएगा कि उत्तर सत्य होना चाहिए था और वास्तव में झूठा था। AreNotEqual दो मान दिखाएगा जिनकी तुलना इसके त्रुटि संदेश में की गई थी।

+0

आईएमओ, यह अब तक का सबसे अच्छा/सबसे संक्षिप्त उत्तर है जिसे मैंने देखा है। शीर्ष जवाब गुम है कि यह एक अधिक जानकारीपूर्ण त्रुटि संदेश देता है। – Catskul

+1

लोकप्रिय धारणा ढांचे लोकप्रियता में बढ़ रहे हैं क्योंकि वे पठनीयता में वृद्धि करते हैं। उदाहरण के लिए, जूनिट के हैमक्रिस्ट मैचर्स (http://code.google.com/p/hamcrest/wiki/Tutorial) और NUnit's ConstraintModel (http://www.nunit.org/index.php?p=constraintModel&r=2.4 देखें) .1)। –

8

संक्षिप्त उत्तर: पठनीयता के लिए।

थोड़ा लंबा उत्तर:

आपका परीक्षण भी कोड हैं, और इरादे के मामले में कोड आप परीक्षण कर रहे हैं के रूप में के रूप में महत्वपूर्ण हैं। इस प्रकार, आप परीक्षण के इरादे को यथासंभव स्पष्ट करना चाहते हैं। कभी-कभी इसका मतलब है कि आप IsFalse का उपयोग करते हैं, कभी-कभी इसका अर्थ IsTrue का उपयोग करना है।

+0

"आप [आर] परीक्षण भी कोड हैं ... आप यथासंभव स्पष्ट रूप से परीक्षण का इरादा बनाना चाहते हैं" ... शैतानों को खेलने के लिए वकील: फिर यह मानक अभ्यास क्यों नहीं है और सामान्य कोड में IsEqual, isNotEqual, आदि का उपयोग करें? (मुझे पता है कि बराबर मौजूद है, लेकिन यह आमतौर पर कम उपयोग किया जाता है) – Catskul

+1

@Catskul: परीक्षण सभी रखरखाव के बारे में है। हम नियमित कोड में समानता और असमानता के लिए == और! = का उपयोग करते हैं। आप कितनी बार देखते हैं: "अगर (ए == (! बी))" के बजाय "अगर (ए! = बी)"? –

+0

@Reed, "! बी" का कोई अर्थ नहीं हो सकता है। आवेदक AFAIK हमेशा सच/गलत को कम करना चाहिए। – Catskul

4

उन तीन तरीकों में तीन अलग-अलग, विशिष्ट लक्ष्य हैं। परीक्षण का लक्ष्य अपने कोड के स्पष्ट सत्यापन और सत्यापन प्रदान करना है। सबसे स्पष्ट और विशिष्ट विधि का उपयोग करके, आप अपने परीक्षण को सबसे सरल, स्पष्ट अर्थ संभव के साथ सबसे छोटा परीक्षण संभव बना रहे हैं।

इससे मदद मिलती है क्योंकि यह स्पष्टता जोड़ता है - आप देख सकते हैं, विशेष रूप से, एक और घोषणात्मक प्रकृति में एक परीक्षण क्या करना चाहिए, जहां एकाधिक परीक्षण परिदृश्यों के लिए एक ही विधि का उपयोग करना, प्रत्येक के पास एक अलग अर्थ है, और अधिक समझ की आवश्यकता है परीक्षण की प्रकृति के बजाय कोड स्वयं ही।

इस मामले में, तीसरा उपयोग करने के लिए उपयुक्त (केवल) उपयुक्त है। हालांकि, अगर आप इस स्थिति के लिए किया था, तो कोई भिन्न उदाहरण के लिए उपयोग करना चाहते हैं,:

Assert.IsTrue(myClass.MethodThatReturnsTrue()); 

आप विधि है कि अपने लक्ष्य के रूप में सबसे स्पष्टता प्रदान करता है का उपयोग करना चाहिए - आप समानता के लिए दो मानों जाँच कर रहे हैं, तो , Assert.IsEqual का उपयोग करें, यदि आप यह सत्यापित करने के लिए एक बूलियन जांच रहे हैं कि यह गलत है, तो Assert.IsFalse का उपयोग करें। इससे त्रुटि रिपोर्ट सार्थक और समझ में आता है।

+0

आपने जोर दिया है (कोई इरादा नहीं है) कि वे बहुत अलग चीजें करते हैं, लेकिन उन्होंने स्पष्टीकरण की पेशकश नहीं की है। – Catskul

+0

@ कैटस्कुल: मैंने दोबारा लिखा - क्या वह मदद करता है? –

1

यह त्रुटियों को पढ़ने के लिए सबसे आसान बनाता है; उस कोड का उपयोग करें जो आपके कोड से सबसे नज़दीक मेल खाता है।

इस मामले में, # 3 का उपयोग करें।

1

क्योंकि आप == और! = को अधिभारित कर सकते हैं, यही कारण है कि।

+0

... और आप अपनी खुद की बराबर विधि लिख सकते हैं। AFAIK यह स्पष्ट नहीं है कि ये आवेषण विधियां स्वयं उन ऑपरेटरों या उस मामले के बराबर विधि पर भरोसा नहीं करती हैं। – Catskul

1

इसे "फ्लुएंट इंटरफेस" कहा जाता है ... और कई लोगों की राय में चीजों को और अधिक पठनीय बनाता है।

संबंधित मुद्दे