简短的问题,为什么Assert.AreEqual(1.0, double.NaN, 1.0)
经过?然而Assert.AreEqual(1.0, double.NaN)
fails.
这是 MSTest (Microsoft.VisualStudio.QualityTools.UnitTestFramework) 中的错误还是我在这里遗漏了一些东西?
最好的问候,埃吉尔。
更新:可能应该补充一点,我的问题背后的原因是,我有一堆单元测试不幸地通过了,因为某些线性代数矩阵运算的结果是 NaN 或 (+/-)Infinity。单元测试很好,但由于当实际或/和预期为 NaN 或无穷大时,带有 delta 的双精度上的 Assert.AreEqual 将通过,所以我只能相信我正在测试的代码是正确的。
当心。 NaN 很奇怪,有点像许多 DBMS 中的 null,并且您不应该将值与它进行比较(直接比较,或者使用 Assert.AreEqual)。从文档中双精度NaN http://msdn.microsoft.com/en-us/library/system.double.nan.aspx:
使用 IsNaN 判断某个值是否
不是一个数字。这是不可能的
判断一个值是否不是
通过与另一个数字进行比较
值等于 NaN。
double zero = 0;
Console.WriteLine((0 / zero) == Double.NaN); // prints false
Console.WriteLine(Double.IsNaN(0 / zero)); // prints true
您必须查看 Assert(double, double, double) 的内部才能了解发生了什么,但一般来说,您依赖于相对于 NaN 的未定义行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)