Zero Division wirft keine Ausnahme in nunit
-
05-10-2019 - |
Frage
Ausführen des folgenden C # -Code durch NUnit Ausbeuten
Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was: null
Also entweder keine DivideByZeroException geworfen wird, oder NUnit sie nicht fangen. Ähnlich wie bei Frage href="https://stackoverflow.com/questions/2516622/nunit-assert-thatmethod-throws-exception-not-catching-exceptions">, aber die Antworten, die er bekam, tun nicht scheint, für mich zu arbeiten. Dies geschieht mit 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?
Lösung
Es wird keine Ausnahme ausgelöst. 1 / 0.0 erhalten Sie nur double.PositiveInfinity. Dies ist, was die IEEE 754-Standard spezifiziert, die C # (und im Grunde jedes andere System) folgt.
Wenn Sie eine Ausnahme Punkt Teilungscode in schwebenden, überprüfen Sie für Null explizit, und es selbst zu werfen. Wenn Sie wollen einfach nur sehen, was DivideByZeroException Sie bekommen, entweder werfen Sie es manuell oder Dividieren ganzer Zahlen durch ganze Zahl Null.
Andere Tipps
MSDN :
Die Ausnahme, die ausgelöst wird, wenn versucht wird, ein integrales oder Dezimalwert durch Null zu dividieren.
Sie haben es mit double,
keine der integralen Typen (int
usw.) oder decimal
. double
keine Ausnahme hier, auch in einem checked
Kontext werfen. Sie erhalten nur + INF.
Wenn Sie als integrale Mathematik bewerten wollen (und erhalten die Ausnahme), zu verwenden:
var a = (1 / int.Parse("0"));