零分区不会在nunit中抛出异常

Bor*_*ris 8 c# nunit division zero dividebyzeroexception

通过NUnit运行以下C#代码

Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was:  null
Run Code Online (Sandbox Code Playgroud)

因此要么不抛出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"));
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jor*_*ren 21

没有异常被抛出.1/0.0只会给你double.PositiveInfinity.这就是IEEE 754标准规定的内容,C#(以及基本上所有其他系统)都遵循.

如果您想要浮点除法代码中的异常,请明确检查零,并自行抛出.如果您只想查看DivideByZeroException将获得什么,请手动抛出或将整数除以整数零.


Mar*_*ell 7

来自MSDN:

尝试将整数或十进制值除以零时引发的异常.

您正在处理的double,不是任何整数类型(int等)或decimal.double即使在checked上下文中也不会抛出异常.你得到+ INF.

如果要评估为整数数学(并获得异常),请使用:

var a = (1 / int.Parse("0"));
Run Code Online (Sandbox Code Playgroud)