答案已过时。如果错误已被修复,何时以及在哪个程序集的哪个版本中?
没错,它已在 VS2013 中使用 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 程序集版本 10.0.0.0 修复。存在于旧版 GAC 中,c:\windows\assembly,它也有 10.1.0.0 版本。
这里有一个 DLL Hell 故事,10.1.0.0 版本是 VS2010 中使用的版本。它有错误,没有正确检查 Double.NaN。微软犯了一个错误,他们修复了 10.1.0.0 但没有更改版本号。所以任何在安装 VS2013后安装 VS2010的人都会受到伤害,它会用错误的版本覆盖 DLL。
解开 DLL Hell 从来没有那么简单,但从连接文章和它在我的机器上的工作方式中可以看出,他们从客户的投诉中确定了故障模式。并提供了一个修复,在更新中交付。不清楚是哪个,在 2014 年 7 月之后。您现在将使用 v10.0.0.0,MSTest.exe 测试运行程序和 QTAgents 有一个 .config 文件,其中包含<bindingRedirect>
从 10.1.0.0 重定向到 10.0.0.0(不是错字) . 一定要获得最新的更新,目前 4. 如果您不确定您安装了哪些更新,请查看帮助 + 关于。
作为记录,固定代码获得了对 Double.NaN 的特定检查,如下所示:
public static void AreEqual(double expected, double actual, double delta, string message, params object[] parameters)
{
if ((double.IsNaN(expected) || double.IsNaN(actual)) || double.IsNaN(delta))
{
string str = (string) FrameworkMessages.AreEqualDeltaFailMsg((message == null) ? string.Empty : ReplaceNulls(message), expected.ToString(CultureInfo.CurrentCulture.NumberFormat), actual.ToString(CultureInfo.CurrentCulture.NumberFormat), delta.ToString(CultureInfo.CurrentCulture.NumberFormat));
HandleFail("Assert.AreEqual", str, parameters);
}
if (Math.Abs((double) (expected - actual)) > delta)
{
string str2 = (string) FrameworkMessages.AreEqualDeltaFailMsg((message == null) ? string.Empty : ReplaceNulls(message), expected.ToString(CultureInfo.CurrentCulture.NumberFormat), actual.ToString(CultureInfo.CurrentCulture.NumberFormat), delta.ToString(CultureInfo.CurrentCulture.NumberFormat));
HandleFail("Assert.AreEqual", str2, parameters);
}
}