2011-08-04 21 views
7

में नूनिट परीक्षणों को डिबगिंग करना मैंने एनयूनीट परीक्षणों के लिए काम करने के लिए डिबगिंग प्राप्त करने के लिए इस सलाह का पालन किया है।विजुअल स्टूडियो सी # एक्सप्रेस 2010

http://www.blackwasp.co.uk/NUnitCSharpExpress.aspx

हालांकि, मैं कई परीक्षण है कि Assert.Throws<...>, जो जब अपवाद मैं के लिए परीक्षण कर रहा हूँ तब होता है को तोड़ने के लिए डिबगर का कारण बनता है है, जब वास्तव में मैं इसे तोड़ने के लिए चाहते हैं उन कॉल के बाहर एक अपवाद तब होता है, तो ।

मैं इस तरह के तरीकों से होने वाले अपवादों को अनदेखा करने के लिए डीबगर कैसे प्राप्त कर सकता हूं?


संपादित करें: मैंने ईवेंट को नीचे की कोशिश की है, जो काम नहीं करता है!

[Test] 
public void InstanciatingWithNullParameterThrowsException() 
{ 
    try 
    { 
     Assert.Throws<ArgumentNullException>(() => new CachedStreamingEnumerable<int>(null)); 
     // This still throws and stops be being able to debug tests called after this one 
    } 
    catch 
    { 

    } 
} 
+2

मुझे इस समस्या का उत्तर भी चाहिए, जो नीचे दिए गए कोई भी जवाब नहीं है। –

उत्तर

4

यहाँ पर तोड़ने के लिए चुन सकते हैं (जो मेरे लिए काम किया है, हालांकि दृश्य में स्टूडियो प्रोफेशनल, एक्सप्रेस नहीं, लेकिन मुझे लगता है कि इससे कोई फर्क नहीं पड़ता)।

  • निनजापिग द्वारा सुझाए गए "अपवाद" संवाद को ऊपर लाएं।

  • "नया अपवाद" संवाद खोलने के लिए Add... बटन पर क्लिक करें।

  • का चयन करें "साझा भाषा क्रम अपवाद" डाउन बॉक्स
  • संपादित करें बॉक्स में ड्रॉप में "NUnit.Framework.AssertionException" दर्ज करें।
  • "नया अपवाद" संवाद बंद करने के लिए OK पर क्लिक करें।
  • "अपवाद" संवाद में वापस सुनिश्चित करें कि दोनों चेक बॉक्स (ThrownऔरUser-unhandled) अनियंत्रित कर रहे हैं।

अब, डीबगर को पूरी तरह से एनयूनीट दावे विफलता को अनदेखा करना चाहिए (यानी फेंक दिया गया, पकड़ा गया या नहीं, NUnit.Framework.AssertionException)।

अद्यतन: यह केवल डीबगर में तोड़ने से रोक देगा, यह अपवाद को अनदेखा नहीं कर सकता है; यानी यह वास्तविक कार्यक्रम प्रवाह में बदलाव नहीं करेगा। कोशिश-पकड़ ब्लॉक में आर्ट-कॉल को बदलने या बदलने या encapsulating से Appart, मुझे नहीं लगता कि वहाँ कुछ भी है जो प्राप्त कर सकते हैं (कम से कम स्वचालित रूप से नहीं)।

+1

यह काम नहीं करता क्योंकि डीबगर टूट रहा है जब मैं जिस अपवाद का परीक्षण कर रहा हूं उसे फेंक दिया गया है, भले ही दावा विफल हो जाए। मेरे मामले में यह एक 'NullReferenceException' है जो मुझे मिल रहा है। –

+0

@ जॉर्ज डकेट: ठीक है, अब मैं उलझन में हूं ;-) मुझे समझ में आया, कि आप विशेष रूप से न्यूटिट के आवेषण की विफलताओं के लिए डीबगर में नहीं तोड़ना चाहते हैं। *() संचालन; जो स्वयं को 'NUnit.Framework.AssertionException' के रूप में प्रकट किया जा रहा है। बेशक, इस मामले में "अनदेखा" का अर्थ है डीबगर में तोड़ना नहीं, कार्यक्रम निश्चित रूप से अपवाद प्राप्त करेगा और इसके अनुसार आगे बढ़ेगा। यदि आप ऐसा करना चाहते हैं जैसे कि अपवाद कभी नहीं हुआ, तो मुझे लगता है कि ऐसा कुछ भी नहीं है जिसे आप वास्तव में कर सकते हैं, इसे पहले स्थान पर फेंकने के अलावा। –

+0

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

0

मुझे पता नहीं है कि वीएस -2010 एक्सप्रेस में यह विकल्प है, लेकिन आप तोड़ने के अपवाद चुन सकते हैं।

'डिबग' मेनू पर जाएं, फिर 'अपवाद' Menu options

और यहाँ से आप क्या अपवाद Exceptions selection window

+0

अच्छा विचार, हालांकि मैं विशिष्ट अपवादों को तोड़ना नहीं चाहता हूं, अगर वे 'Assert.Throws' विधि' से फेंक दिए गए हैं तो मैं तोड़ना नहीं चाहता हूं। –

0

मैं nunit-gui-runner.dll संदर्भित और तरह

NUnit.Gui.AppEntry.Main(new string[] { Dll }); 

यह NUnit जीयूआई को लाता है यह लागू समाप्त हो गया है। मैं उस विशिष्ट परीक्षण को चला सकता हूं जिसमें मुझे रूचि है।

0

मुझे एक ही समस्या थी।यद्यपि आपका मूल दृष्टिकोण (try...catch ब्लॉक की आवश्यकता के बिना) अधिकांश अपवाद प्रकारों के लिए काम करता है, ArgumentNullException काम नहीं करता है। मैं इसे इस तरह तय:

[Test] 
public void InstanciatingWithNullParameterThrowsException() 
{ 
    bool isArgumentNullExceptionThrown = false; 
    try 
    { 
     new CachedStreamingEnumerable<int>(null); 
    } 
    catch (ArgumentNullException) 
    { 
     isArgumentNullExceptionThrown = true; 
    } 
    Assert.That(isArgumentNullExceptionThrown); 
} 

यह रूप में सुंदर नहीं है, लेकिन यह काम करने के लिए प्रतीत होता है।

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