Вопрос

Запуск следующего C # Code через NUNIT DAYET

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

Таким образом, ни один развернутыйЗемозеприeException не брошен, или 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"));
    }

Есть идеи?

Это было полезно?

Решение

Никакое исключение не брошено. 1 / 0.0 просто даст вам двойной. Попозитивность. Это то, что указано стандарт IEEE 754, который содержит C # (и в основном любую другую систему).

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

Другие советы

От MSDN:

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

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

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

var a = (1 / int.Parse("0"));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top