2010-08-31 8 views
5

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

'arrange: 
'pre-conditions:  
    Assert the arrange worked 
'act: 
'assert: 

अपने परीक्षण परीक्षण बहुत ज्यादा है? क्या यह उन चीजों की देखभाल कर रहा है जिनकी परवाह नहीं है? मुझे इस पर कुछ राय सुनना अच्छा लगेगा।

+0

संभावित डुप्लिकेट [क्या यह एक यूनिट टेस्ट में आर्टर्ट से अधिक होने का बुरा अभ्यास है?] (Http://stackoverflow.com/questions/762512/is-it-bad-practice-to-have-more-than -सर्ट-इन-ए-यूनिट-टेस्ट) –

+1

मुझे नहीं लगता कि यह एक डुप्लिकेट है, यदि आप परिणामों को मान्य करने के लिए एकाधिक आवेषणों का उपयोग करके परीक्षण स्थिरता सेटअप बनाम सत्यापन के परिप्रेक्ष्य से इसे देखते हैं। इसे प्रतिबिंबित करने के लिए प्रश्न का नाम बदलना सहायक हो सकता है। – Jay

+0

मैं सुझाव को प्रतिबिंबित करने के लिए नाम बदलूंगा। @ करल मैनस्टर: बहुत बढ़िया दाढ़ी दोस्त! – Buzzer

उत्तर

3

जैसा कि मैंने here कहा था, मुझे लगता है कि शायद हमारा सर्वोत्तम अभ्यास होना चाहिए, व्यवस्था-अधिनियम-सम्मिलन नहीं, बल्कि व्यवस्थित करें- -Act-Assert मानें। अभिनय से पहले, हम जोर देते हैं कि कार्रवाई का वांछित परिणाम पहले से ही प्रभावी नहीं है। यह बिल्कुल जैसा आप पूछ रहे हैं उतना ही नहीं है; आम तौर पर मुझे नहीं लगता कि सेटअप को सत्यापित करना महत्वपूर्ण है, क्योंकि सेटअप त्रुटियां किसी भी मामले में खुद को "जोर से" प्रकट करती हैं; लेकिन परीक्षण में दूसरा जोर देने का यह एक अच्छा कारण है।

1

मुझे लगता है कि सेटअप को सत्यापित करने के लिए Assert का उपयोग करना है, क्योंकि यह परिणाम को गड़बड़ कर देता है (यदि आप आउटपुट को देख रहे हैं तो यह पता लगाना मुश्किल हो सकता है)।

मुझे पता है कि कई बार यह आवश्यक है, या आप बस यह सुनिश्चित करना चाहते हैं कि आपके इरादे से सबकुछ परीक्षण किया जा रहा है।

मेरा अभ्यास इस उद्देश्य के लिए Debug.Assert (सी # में) का उपयोग करना है, ताकि सेटअप सत्यापन परीक्षण आउटपुट का हिस्सा न बन जाए।

यदि सेटअप सिस्टम को अपेक्षित स्थिति में नहीं डालता है तो आप अपवाद फेंक कर अन्य भाषाओं में इसे प्राप्त करने में सक्षम हो सकते हैं।

विभिन्न परीक्षण धावक इसे अलग-अलग संभाल सकते हैं, इसलिए आपको यह सुनिश्चित करना चाहिए कि इस दृष्टिकोण के वांछित प्रभाव (परीक्षण विफल हो गए हैं, लेकिन Debug.Assert पास या कोई अपवाद फेंकने तक कोई अतिरिक्त रिपोर्ट आउटपुट नहीं है)।

+0

ये सभी महान जवाब हैं। हालांकि, मैं जय का चयन कर रहा हूं क्योंकि मुझे लगता है कि कैसे Debug.Assert परीक्षण में पढ़ता है। एक बार फिर धन्यवाद। – Buzzer

1

मैं इसके लिए एक वेनिला "एसेर्ट" का उपयोग नहीं करता बल्कि Assert.Inconclusive (एमएसटीएस्ट) ¹। परीक्षण विफल नहीं हुआ है, इसलिए आप परीक्षण चलाने में विफल नहीं होना चाहते हैं।

1) Assume जुनीट और न्यूटिट में मेरा मानना ​​है।

+0

लिंक [Assert.Inconclusive] से लिंक करें (http://msdn.microsoft.com/en-us/library/ms243750.aspx) –

+0

धन्यवाद डेरेक, उत्तर अपडेट किया गया। –

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