2009-05-28 17 views
13

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

मेरी बातों में से एक बात यह थी कि जब आप अपने परीक्षण लिखते हैं, तो आपके सेटअप और परीक्षण विधियों ([सेटअप] और [टेस्ट]) को निष्पादित करने का आदेश होता है।

क्या ऐसे अन्य लोग हैं जिन्हें आप परीक्षण करते समय उपयोग कर सकते हैं और यदि ऐसा है तो उनमें से निष्पादन आदेश क्या है, जैसे कि निपटान या कुछ? मैंने परीक्षण स्थिरता सेटअप देखा, लेकिन उस से बहुत परिचित नहीं था।

उदाहरण:

जब मैं परीक्षण चलाने के लिए, यह करता है [सेटअप] पहले और उसके बाद चलाता है [टेस्ट] जब यह अगले परीक्षण के लिए चला जाता है यह [सेटअप] फिर से चलाता है और उसके बाद के लिए चला जाता [ परीक्षा]।

यदि मैं मदद करता हूं तो मैं न्यूटिट का उपयोग कर रहा हूं।

यहाँ मैं सेटअप का छोटा उदाहरण है:

using NUnit.Framework; 

    namespace TestingProject 
    { 
     [TestFixture] 
     public class CustomerService_Tests 
     { 
      public string MyAccount = string.Empty; 

      [SetUp] 
      public void Setup() 
      { 
       MyAccount = "This Account"; 
      } 

      [Test] 
      public void Validate_That_Account_Is_Not_Empty() 
      { 
       Assert.That(!string.IsNullOrEmpty(MyAccount)); 
      } 

      [Test] 
      public void Validate_That_Account_Is_Empty() 
      { 
       Assert.That(string.IsNullOrEmpty(MyAccount)); 
      } 
     } 
    } 

तो, जब मैं परीक्षण चलाने के लिए, यह सेटअप करता है, और उसके बाद पहला टेस्ट, तो सेटअप और फिर 2 परीक्षण।

मेरा प्रश्न यह है कि मैं [सेटअप] और [टेस्ट] जैसे परीक्षण के दौरान अन्य प्रकार का उपयोग कैसे कर सकता हूं और इनके लिए निष्पादन का आदेश क्या है।

उत्तर

20

NUnit (यकीन नहीं दूसरों के बारे में) आप फांसी के निम्न क्रम का उपयोग करना:

TestFixtureSetup

सेटअप

टेस्ट

टियरडाउन

सेटअप

टेस्ट

टियरडाउन

TestFixtureTearDown

हर बार जब आप अपने परीक्षण यह हमेशा इसी क्रम में निष्पादित करेंगे चलाते हैं।

यदि आप निम्न कोड को देखते हैं, तो आप जो भी बात कर रहे हैं उसकी एक सटीक प्रतिकृति देख सकते हैं। आप इस कोड को कॉपी और पेस्ट भी कर सकते हैं और इसे काम करना चाहिए (एनयूनीट का उपयोग करके, सुनिश्चित नहीं है कि यह दूसरों के साथ काम करेगा)।

यदि आप इसे डीबग मोड में चलाते हैं, और प्रत्येक विधि पर ब्रेक पॉइंट डालते हैं, तो आप डीबग करते समय निष्पादन का क्रम देख सकते हैं।

using NUnit.Framework; 

namespace Tester 
{ 
    [TestFixture] 
    public class Tester 
    { 
     public string RandomVariable = string.Empty; 

     [TestFixtureSetUp] 
     public void TestFixtureSetup() 
     { 
      //This gets executed first before anything else 
      RandomVariable = "This was set in TestFixtureSetup"; 
     } 

     [SetUp] 
     public void Setup() 
     { 
      //This gets called before every test 
      RandomVariable = "This was set in Setup"; 
     } 

     [Test] 
     public void MyTest1() 
     { 
      //This is your test... 
      RandomVariable = "This was set in Test 1"; 
     } 

     [Test] 
     public void MyTest2() 
     { 
      //This is your test... 
      RandomVariable = "This was set in Test 2"; 
     } 

     [TearDown] 
     public void TestTearDown() 
     { 
      //This gets executed after your test gets executed. 
      //Used to dispose of objects and such if needed 
      RandomVariable = "This was set in TearDown"; 
     } 

     [TestFixtureTearDown] 
     public void TestFixtureTearDown() 
     { 
      //Executes Last after all tests have run. 
      RandomVariable = "This was set in TestFixtureTearDown"; 

     } 

    } 
} 
+6

भी Console.WriteLine करते हैं और कर सकते हैं ब्रेक अंक निर्धारित करने के लिए है, लेकिन +1 वैसे भी – Davy8

+5

अच्छा बिंदु नहीं! इसके अलावा, यदि आप डीबग विंडो में इसका पालन करना चाहते हैं तो आप एक डीबग। राइटलाइन() कर सकते हैं। – CodeLikeBeaker

+0

मैंने कोशिश की और यह बहुत अच्छा काम किया! @ डेवी 8, मैंने कंसोल किया था। राइटलाइन() और मैंने देखा कि परिवर्तन होते हैं और निष्पादन का आदेश देख सकते हैं। यह बहुत अच्छी चीजें है। आपकी मदद के लिए बहुत बहुत धन्यवाद! –

2

चेक बाहर NUnit प्रलेखन:

http://www.nunit.org/index.php?p=attributes&r=2.2.10

के तहत "विशेषता" के दाहिने हाथ की ओर डाउन मेनू [सेटअप] का वर्णन करता है, [टेस्ट] और अन्य विशेषताओं आप जब विकासशील उपयोग कर सकते हैं अपने परीक्षण।

4

आपके द्वारा परीक्षण किए जाने वाले प्रत्येक वर्ग के लिए, एक परीक्षण स्थिरता, आप 4 विशेष तरीकों को निर्दिष्ट कर सकते हैं।विधियों के नाम वास्तव में महत्वपूर्ण नहीं हैं, लेकिन उन्हें पहचानने के लिए आपको निम्न चार विशेषताओं में से एक के साथ विधियों को टैग करने की आवश्यकता है।

कन्वेंशन यह निर्देश देता है कि आप विधियों को समान गुणों के समान कहते हैं, लेकिन जैसा कि मैंने कहा, गुण महत्वपूर्ण हैं।

ध्यान दें कि जिन गुणों का मैं वर्णन करता हूं वे NUnit में पाए जाते हैं, लेकिन अधिकांश इकाई परीक्षण ढांचे में समान गुण (यदि नहीं हैं) उपयोग में हैं।

गुण हैं:

  • TestFixtureSetUp
  • TestFixtureTearDown
  • सेटअप
  • टियरडाउन

पहले दो एक पूरे के रूप वर्ग से कोई लेना देना नहीं है। TestFixtureSetUp विशेषता के साथ टैग की गई विधि कक्षा में पहले परीक्षण से पहले एक बार चलायी जाती है।

कक्षा में सभी परीक्षण निष्पादित किए जाने के बाद, TestFixtureTearDown विशेषता के साथ टैग की गई विधि को एक बार निष्पादित किया जाता है।

आप इन दोनों का उपयोग सामान्य परीक्षण संरचनाओं को तैयार करने के लिए कर सकते हैं जो सभी परीक्षणों के लिए समान हैं, और किसी भी परीक्षण द्वारा संशोधित नहीं हैं (यह महत्वपूर्ण है)।

अंतिम दो, SetUp और TearDown, दो विधियों को टैग करने के लिए उपयोग किए जाते हैं जो पहले चलेंगे, और प्रत्येक व्यक्तिगत परीक्षण के बाद।

SetUp के साथ टैग की गई विधि को प्रत्येक परीक्षण से पहले बुलाया जाता है, और प्रत्येक परीक्षण के बाद TearDown के साथ टैग की गई विधि को कॉल किया जाता है। आप सामान्य डेटा संरचनाओं को तैयार करने के लिए इनका उपयोग कर सकते हैं, हालांकि वे प्रत्येक परीक्षण के लिए समान हैं, फिर भी वे कुछ या सभी परीक्षणों से बदल जाएंगे, इसलिए प्रत्येक परीक्षण के लिए एक नई ताजा प्रति तैयार करना सबसे अच्छा है।

execute TestFixtureSetUp, if present 
for each test do 
    execute SetUp, if present 
    execute actual test 
    execute TearDown, if present 
execute TestFixtureTearDown, if present 

इन विशेषताओं के उपयोग के पूरी तरह से वैकल्पिक हैं:

छद्म कोड के रूप में इन तरीकों के निष्पादन बाहर बिछाना हमें इस आदेश देता है। TearDown या इसके विपरीत होने के लिए आपको SetUp रखने की आवश्यकता नहीं है। वे केवल वे बिंदु हैं जिन्हें आप कोड निष्पादित करना चाहते हैं।

0

ध्यान रखें कि यूनिट परीक्षण मामलों को एक दूसरे से स्वतंत्र रखने का सबसे अच्छा अभ्यास है। इसलिए उन्हें स्वतंत्र रूप से समझा जा सकता है, संशोधित और चलाया जा सकता है।

कुछ लोग एक खराब अभ्यास के साथ सेटअप और टियरडाउन पर भी विचार करते हैं। तर्क के लिए इन लिंक देखें:

0

NUnit में निष्पादन के आदेश 2.5.1 एक बार फिर बदल गया है। मैं मानता हूं कि एक दूसरे के साथ कभी भी हस्तक्षेप नहीं करना चाहिए।

0

न्यूटिट 3।0 के रूप में इंगित here इकाई परीक्षण विशेषताओं के बारे में कुछ परिवर्तन किए हैं:

TestFixtureSetUpAttribute और TestFixtureTearDownAttribute OneTimeSetUpAttribute के लिए समानार्थी शब्द और परीक्षण जुड़नार में OneTimeTearDownAttribute के रूप में समर्थन किया जाना करने के लिए जारी है, लेकिन एक पदावनत कर रहे हैं।

के बाद से SetUpAttribute और TearDownAttribute दो अलग मायनों में उपयोग किया जाता है, यह बस SetUpFixture में उनके उपयोग का बहिष्कार करना संभव नहीं है। को उस संदर्भ में अस्वीकृत कर दिया गया है, जो ब्रेकिंग चेंज है।

  • OneTimeSetUp
  • सेटअप
  • टेस्ट
  • टियरडाउन
  • सेटअप
  • टेस्ट
  • टियरडाउन
  • +०१२३५१६४१०६:

तो, निष्पादन आदेश पीछा कर रहा है

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