Dot-Net
為什麼 Assert.AreEqual(1.0, double.NaN, 1.0) 通過?
簡短的問題,為什麼會
Assert.AreEqual(1.0, double.NaN, 1.0)通過?而Assert.AreEqual(1.0, double.NaN)失敗。它是 MSTest (Microsoft.VisualStudio.QualityTools.UnitTestFramework) 中的錯誤還是我在這裡遺漏了什麼?
最好的問候,埃吉爾。
更新:可能應該補充一點,我的問題背後的原因是,由於某些線性代數矩陣運算的結果是 NaN 或 (+/-)Infinity,我有一堆單元測試不幸通過了。單元測試很好,但是由於當實際或/和預期為 NaN 或 Infinity 時,帶有增量的雙精度數上的 Assert.AreEqual 將通過,所以我不得不相信我正在測試的程式碼是正確的。
當心。NaN 很奇怪,有點像許多 DBMS 中的 null,您不應該將值與它進行比較(直接或使用 Assert.AreEqual)。來自Double.NaN的文件:
使用 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 的未定義行為。