2010-05-31 17 views
8

NUnit उपजशून्य विभाजन नूनिट में अपवाद नहीं फेंकता है

Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was: null 

के माध्यम से निम्न सी # कोड चला रहा है तो या तो कोई DivideByZeroException फेंक दिया गया है, या NUnit इसे पकड़ नहीं पाता है। Xzx22 प्रश्न के समान, लेकिन जवाब जो मिला, वह मेरे लिए काम नहीं कर रहा है। यह NUnit 2.5.5.10112, और .NET 4.0.30319 का उपयोग कर रहा है।

 [Test] 
    public void TestSanity() 
    { 
     Assert.Throws<DivideByZeroException>(new TestDelegate(() => DivideByZero())); 
    } 

    private void DivideByZero() 
    { 
     // Parse "0" to make sure to get an error at run time, not compile time. 
     var a = (1/Double.Parse("0")); 
    } 

कोई विचार?

+1

Int32.Parse ("0") Double.Parse के बजाय ("0") – Joe

+0

धन्यवाद लोग कोशिश करो। यह जल्दी था। मैन, मुझे यह पता था, लेकिन कभी-कभी आप बस डॉट्स को कनेक्ट नहीं करते हैं। – Boris

उत्तर

21

कोई अपवाद नहीं फेंक दिया गया है। 1/0.0 आपको बस दोगुना देगा। सकारात्मक इन्फिनिटी। आईईईई 754 मानक यह निर्दिष्ट करता है, जो सी # (और मूल रूप से हर दूसरे सिस्टम) का पालन करता है।

यदि आप फ़्लोटिंग पॉइंट डिवीजन कोड में अपवाद चाहते हैं, तो शून्य को स्पष्ट रूप से जांचें, और इसे स्वयं फेंक दें। यदि आप सिर्फ यह देखना चाहते हैं कि DivideByZeroException आपको क्या प्राप्त करेगा, या तो इसे मैन्युअल रूप से फेंक दें या पूर्णांक शून्य से पूर्णांक विभाजित करें।

+0

धन्यवाद, यह निश्चित रूप से था। – Boris

7

MSDN से:

अपवाद शून्य से एक अभिन्न या दशमलव मान को विभाजित करने का प्रयास है जब वहाँ फेंक दिया जाता है कि।

आप double, नहीं अभिन्न प्रकार (int आदि) या decimal से किसी के साथ काम कर रहे हैं। double यहां एक अपवाद नहीं फेंकता है, यहां तक ​​कि checked संदर्भ में भी। आप बस + आईएनएफ प्राप्त करें।

आप के रूप में अभिन्न गणित का मूल्यांकन (और अपवाद) चाहते हैं, उपयोग:

var a = (1/int.Parse("0")); 
+1

आईईईई फ्लोटिंग पॉइंट मानक में शून्य से विभाजन के संबंध में विकिपीडिया पर कुछ सामान्य जानकारी (.NET विशिष्ट नहीं)। http://en.wikipedia.org/wiki/Division_by_zero#In_computer_arithmetic – Josh

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