Нулевое деление не выбрасывает исключения в монахини

Выполнение следующего кода 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"));
Другие вопросы по тегам