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

时间:2010-05-31 19:43:22

标签: c# nunit division zero dividebyzeroexception

通过NUnit运行以下C#代码产生

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

因此,要么不抛出DivideByZeroException,要么NUnit不捕获它。与this问题类似,但他得到的答案似乎对我不起作用。这是使用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 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:7)

来自MSDN

  

尝试将整数或十进制值除以零时抛出的异常。

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

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

var a = (1 / int.Parse("0"));