Нулевое подразделение не выдает исключение в nunit

Выполнение следующего C# кодирует через урожаи NUnit

Test.ControllerTest.TestSanity: Expected: `` But was:  null

Так или никакой DivideByZeroException не брошен, или NUnit не ловит его. Подобный этому вопросу, но ответам он добрался, кажись, не работать на меня. Это использует NUnit 2.5.5.10112 и.NET 4.0.30319.

    [Test]
    public void TestSanity()
    {
        Assert.Throws(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"));
    }

Какие-либо идеи?

8
задан Community 23 May 2017 в 12:05
поделиться

2 ответа

Исключение не выбрасывается. 1 / 0.0 просто даст вам double.PositiveInfinity. Это то, что определяет стандарт IEEE 754, которому следует C# (и практически каждая другая система).

Если вы хотите получить исключение в коде деления с плавающей запятой, проверьте нуль явно и бросьте его сами. Если вы просто хотите посмотреть, что даст вам исключение DivideByZeroException, либо бросьте его вручную, либо делите целые числа на целый ноль.

21
ответ дан 5 December 2019 в 05:55
поделиться

Из MSDN:

Исключение, которое возникает при попытке разделить интеграл или десятичное значение на ноль.

Вы имеете дело с double, а не с любым из интегральных типов (int и т.д.) или decimal. double не вызывает исключения даже в контексте checked. Вы просто получаете +INF.

Если вы хотите оценить как интегральную математику (и получить исключение), используйте:

var a = (1 / int.Parse("0"));
7
ответ дан 5 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: