2010-05-31 3 views
8

Ausführen des folgenden C# -Code durch NUnitNullteilung nicht werfen Ausnahme in nunit

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

So ergibt entweder keine DivideByZeroException geworfen wird, oder NUnit es nicht fangen. Ähnlich wie this Frage, aber die Antworten, die er bekam, scheinen nicht für mich zu arbeiten. Dies verwendet NUnit 2.5.5.10112 und .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")); 
    } 

Irgendwelche Ideen?

+1

Versuchen Int32.Parse ("0") anstelle von Double.Parse ("0") – Joe

+0

Danke Jungs. Das war schnell. Mann, ich wusste das, aber manchmal verbindest du die Punkte nicht. – Boris

Antwort

21

Keine Ausnahme wird ausgelöst. 1/0.0 gibt Ihnen einfach double.PositiveInfinity. Dies ist, was der IEEE 754 Standard spezifiziert, welcher C# (und im Grunde jedes andere System) folgt.

Wenn Sie eine Ausnahme im Fließkomma Division Code möchten, überprüfen Sie explizit auf Null und werfen Sie es selbst. Wenn Sie nur sehen wollen, was DivideByZeroException Ihnen bringt, werfen Sie es entweder manuell oder teilen ganze Zahlen durch Ganzzahl Null.

+0

Danke, das war es natürlich. – Boris

7

Von MSDN:

Die Ausnahme, die ausgelöst wird, wenn versucht wird, ein integrales oder Dezimalwert durch Null zu dividieren.

Sie beschäftigen sich mit double, nicht jeder der integrierten Typen (int usw.) oder decimal. double wirft hier keine Ausnahme, auch nicht in einem checked Kontext. Du bekommst einfach + INF.

Wenn Sie als integrale Mathematik auswerten möchten (und die Ausnahme zu erhalten), zu verwenden:

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

Auch einige allgemeine Informationen (nicht .NET-spezifisch) zu Wikipedia bezüglich Division durch Null im IEEE-Gleitkomma-Standard. http://en.wikipedia.org/wiki/Division_by_zero#In_computer_arithmetic – Josh