2011-10-05 18 views
10

पर एनयूनीट स्टॉप निष्पादन परीक्षण कैसे करें, हम एकीकरण परीक्षण निष्पादित करने के लिए एनयूनीट का उपयोग करते हैं। ये परीक्षण बहुत समय ले रहे हैं। अक्सर विफलता का पता लगाने का एकमात्र तरीका टाइमआउट पर होता है।पहली विफलता

मैं परीक्षणों को निष्पादित करना बंद कर दूंगा जैसे ही एक विफलता का पता चला है।

क्या ऐसा करने का कोई तरीका है?

+0

मेरा मानना ​​है कि यह परीक्षण-धावक विशिष्ट खोज है तो आप परीक्षण कैसे चलाते हैं? न्यूट-कंसोल, एमएसबिल्ड न्यूटिट टास्क, एक अन्य धावक? – sll

उत्तर

1

यह शायद आदर्श समाधान नहीं है, लेकिन यह आपको वही करता है जो आपको चाहिए। यदि परीक्षण विफल हो गया है तो शेष परीक्षणों को अनदेखा करें। तो आप संभवतः इस विशेषता उस पर सजाया के साथ एक आधार वर्ग का पता लगाने की रक्षा की उस में विधि बना सकते हैं और है और यह सब से TestFixture कक्षाएं प्राप्त कर सकता है

[TestFixture] 
    public class MyTests 
    { 
     [Test] 
     public void Test1() 
     { 
      Ascertain(() => Assert.AreEqual(0, 1)); 
     } 

     [Test] 
     public void Test2() 
     { 
      Ascertain(() => Assert.AreEqual(1, 1)); 
     } 

     private static void Ascertain(Action condition) 
     { 
      try 
      { 
       condition.Invoke(); 
      } 

      catch (AssertionException ex) 
      { 
       Thread.CurrentThread.Abort(); 
      } 
     } 
    } 

TestFixtureAttribute के बाद से, दाय है।

एकमात्र नकारात्मक पक्ष, आपको अपने सभी मौजूदा दावों को दोबारा बदलना होगा।

+0

यह सही दिशा में एक कदम है। यह केवल आवेषण के लिए काम करेगा, और अपवाद नहीं। लेकिन यह एक दिलचस्प विचार है ... मैं अपवादों के लिए कुछ ऐसा करने में सक्षम हो सकता हूं। – willem

+0

@ विलेम क्या आप पहले सफल होने पर अपवादों के लिए अपना कामकाज पोस्ट कर सकते हैं। मैं भी कोशिश करूँगा। – Raghu

+0

क्या आप पूरे टेस्ट विधि निकाय को एस्कर्टन में लपेट नहीं सकते हैं और बस सभी अपवादों को कैप्चर कर सकते हैं? –

22

नूनिट-कंसोल का उपयोग करके, आप इसे/stoponerror कमांड लाइन पैरामीटर का उपयोग करके प्राप्त कर सकते हैं।

कमांड लाइन संदर्भ के लिए here देखें।

+4

मेरा मानना ​​है कि यह एक बेहतर दृष्टिकोण है। आपने प्रक्रिया में हस्तक्षेप करने और अनावश्यक सामान के साथ परीक्षण कोड को प्रदूषित करने के बजाय NUnit को इसे संभालने दें! – mosu

+0

नूनिट ** 3 ** के साथ - console.exe --stoponerror –

6

मैं NUnit 3 का उपयोग कर रहा हूं और निम्न कोड मेरे लिए काम करता है।

public class SomeTests { 
    private bool stop; 

    [SetUp] 
    public void SetUp() 
    { 
     if (stop) 
     { 
      Assert.Inconclusive("Previous test failed"); 
     } 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) 
     { 
      stop = true; 
     } 
    } 
} 

वैकल्पिक रूप से आप इसे एक अमूर्त वर्ग बना सकते हैं और इससे प्राप्त कर सकते हैं।

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