为什么 Assert.AreEqual(1.0, double.NaN, 1.0) 通过?

2024-02-15

简短的问题,为什么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(使用前将#替换为@)

为什么 Assert.AreEqual(1.0, double.NaN, 1.0) 通过? 的相关文章

随机推荐