通过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"));
}
有什么想法吗?
答案 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"));