Нулевое деление не выбрасывает исключения в монахини
Выполнение следующего кода C# через NUnit приводит к
Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was: null
Так что либо DivideByZeroException не генерируется, либо NUnit не перехватывает его. Похоже на этот вопрос, но ответы, которые он получил, похоже, не работают для меня. Это использует 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"));
}
Есть идеи?
2 ответа
Не исключение не выбрасывается. 1 / 0.0 просто даст вам double.PositiveInfinity. Это то, что стандарт IEEE 754 определяет, какой C# (и в основном любая другая система) следует.
Если вы хотите исключение в коде с плавающей запятой, явно проверьте ноль и бросьте его самостоятельно. Если вы просто хотите увидеть, что DivideByZeroException получит вам, либо бросьте его вручную, либо разделите целые числа на целое ноль.
Из MSDN:
Исключение, которое выдается при попытке делить целое или десятичное значение на ноль.
Вы имеете дело с double,
не любой из целочисленных типов (int
и т. д.) или decimal
, double
здесь не исключение, даже в checked
контекст. Вы просто получаете +INF.
Если вы хотите оценить как интегральную математику (и получите исключение), используйте:
var a = (1 / int.Parse("0"));