2011-11-23 18 views
5

मैं माइक्रोसॉफ्ट टेस्ट के साथ वीएस 2010 में कई यूनिट परीक्षण लिख रहा हूं।कोशिश करने से बचने का सबसे अच्छा तरीका क्या है ... अंत में ... मेरे यूनिट परीक्षणों में?

[TestMethod] 
public void This_is_a_Test() 
{ 
    try 
    { 
    // do some test here 
    // assert 
    } 
    catch (Exception ex) 
    { 
    // test failed, log error message in my log file and make the test fail 
    } 
    finally 
    { 
    // do some cleanup with different parameters 
    } 
} 

यह एक तरह से बदसूरत है प्रत्येक परीक्षा पद्धति इस मैं गिर गया की तरह लग रहा है: प्रत्येक परीक्षा कक्षा में मैं कई परीक्षण नीचे के समान तरीकों की है। लेकिन अब तक मुझे अपने टेस्ट कोड को और अधिक साफ करने के लिए एक अच्छा समाधान नहीं मिला है, खासतौर पर अंत में ब्लॉक में क्लीनअप कोड। क्या कोई यहां मुझे कुछ सलाह दे सकता है?

अग्रिम धन्यवाद।

उत्तर

6

तुम सच में संभाल और लॉग, जबकि परीक्षा निष्पादन अपवादों को आप एक सहायक विधि में इस मानक टेम्पलेट लपेट और उपयोग कर सकते हैं नीचे [*] से पता चला की तरह चाहते हैं।

लेकिन अपवाद अगर परीक्षण मामले का एक हिस्सा है यह गलत तरीका है और आप एक परीक्षण ढांचे द्वारा प्रदान की सुविधाएं, उदाहरण के लिए NUnit अपवाद परीक्षण करने के लिए इस तरह के सहायकों प्रदान करता है का उपयोग करना चाहिए:

Assert.Throws<ExceptionType>(() => { ... code block... }); 
Assert.DoesNotThrow(() => { ... code block... }); 

और सफाई विशेष करने की एक परीक्षण ढांचे द्वारा स्वचालित रूप से परीक्षण प्रारंभिकरण और सफाई करने के लिए [TestCleanup] औरजैसी विधि विशेषताओं।

[*] विचार एक प्रतिनिधि में लपेट परीक्षण शरीर और सहायक जो वास्तव में परीक्षा निष्पादन आज़माएं/कैच ब्लॉक में लिपटे प्रदर्शन में पारित करने के लिए है:

// helper 
public void ExecuteTest(Action test) 
{ 
    try 
    { 
    test.Invoke(); 
    } 
    catch (Exception ex) 
    { 
    // test failed, log error message in my log file and make the test fail 
    } 
    finally 
    { 
    // do some cleanup with different parameters 
    } 
} 

[TestMethod] 
public void This_is_a_Test_1() 
{ 
    Action test =() => 
    { 
     // test case logic 
     // asserts 
    }; 

    this.ExecuteTest(test); 
} 
+0

उत्तर के लिए धन्यवाद, मैं समाधान को एक प्रयास दूंगा। –

1

सभी साफ़ कोशिश-catch- आखिरकार (विशेष रूप से पकड़ केवल अनावश्यक नहीं है, बल्कि हानिकारक है, आपको परीक्षण करते समय अपवाद नहीं लेना चाहिए) और आंसू विधि में सफाई करें (हालांकि यह एमएस टेस्ट में किया गया है, मुझे लगता है कि [TearDownMethod] या [ स्थिरता टायरडाउन] या ऐसा कुछ)।

+0

मुझे अंततः सफाई करने के लिए ब्लॉक की आवश्यकता है क्योंकि प्रत्येक टेस्ट विधि में कुछ साफ करने के लिए अलग है। –

+0

यह मामला है, हाँ। अगर आपको सफाई की ज़रूरत है। टेस्ट अलग हो रहा है। और यदि आप उन्हें चतुराई से फिक्स्चर में अलग करते हैं, जहां आप आम सेटअप और सामान्य सफाई करते हैं, तो आपको शायद ही कभी इस पैटर्न की आवश्यकता होती है। मैं आपको अपने अनुभव से बताता हूं। क्या आप मुझे एक उदाहरण दे सकते हैं जिसे आपको साफ करने की आवश्यकता है? (और मुझे उम्मीद है कि आप समझते हैं कि अपवादों को पकड़े जाने के लिए डिज़ाइन नहीं किया गया है, हाथ से लॉग इन हैं, लेकिन उन्हें पकड़ने के लिए धावक का परीक्षण करने के लिए छोड़ा गया है और यह देखने के लिए कि यह विफलता या त्रुटि है, इसलिए 'पकड़ो' भाग वास्तव में इस तरह के खिलाफ थे कि इकाई-परीक्षण कैसे होना है)। –

+0

कैच ब्लॉक में मैं समीक्षा के लिए परिभाषित एक केंद्रीय स्थान में त्रुटि संदेशों को लॉग करना चाहता हूं। अंत में ब्लॉक में मुझे डेटाबेस में कुछ गतिशील रूप से जेनरेट किए गए डेटा को साफ़ करने की आवश्यकता है। कुछ परीक्षण विधियों के लिए केवल कुछ डेटा आम हैं। –