Câu trả lời đã lỗi thời. Nếu lỗi đã được sửa, khi nào và trong phiên bản nào của assembly nào?
Đúng vậy, nó đã được sửa trong VS2013 với phiên bản Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, phiên bản 10.0.0.0. Có mặt trong phiên bản GAC cũ, c: \ windows \ assembly, nó cũng có phiên bản 10.1.0.0.
Có một câu chuyện về DLL Hell ở đây, phiên bản 10.1.0.0 là phiên bản được sử dụng trong VS2010. Nó có lỗi, không kiểm tra đúng cách cho Double.NaN. Microsoft đã mắc lỗi, họ đã sửa 10.1.0.0 nhưng không thay đổi số phiên bản. Vì vậy, bất cứ ai cài đặt VS2010 sau khi cài đặt VS2013 sẽ bị tổn thương, nó sẽ ghi đè lên DLL với phiên bản lỗi.
Làm sáng tỏ DLL Địa ngục không bao giờ đơn giản, nhưng nó xuất hiện từ connect article và từ cách nó hoạt động trên máy của tôi mà họ đã xác định chế độ lỗi từ khiếu nại của khách hàng. Và cung cấp bản sửa lỗi, được phân phối trong bản cập nhật. Không rõ ràng, sau tháng 7 năm 2014. Bây giờ bạn sẽ sử dụng v10.0.0.0, runner thử nghiệm MSTest.exe và QTAgents có tệp .config với <bindingRedirect>
chuyển hướng từ 10.1.0.0 đến 10.0.0.0 (không phải lỗi đánh máy). Hãy chắc chắn để có được bản cập nhật mới nhất, hiện tại 4. Tìm trong Help + About nếu bạn không chắc chắn những gì bạn đã cài đặt bản cập nhật.
Đối với hồ sơ, mã cố định mua kiểm tra cụ thể cho Double.NaN, nó trông như thế này:
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);
}
}
Microsoft entry lỗi: https://connect.microsoft.com/VisualStudio/feedback/details/ 762286/unit-test-with-assert-areequal-2-3-double-nan-0-1-pass – jbe
Và những kẻ ngốc đóng cửa nó là "theo thiết kế". –
Thú vị, vì MS đã thử lại và nói rằng nó đã được sửa: http://connect.microsoft.com/VisualStudio/feedback/details/780654/assert-equal-and-double-nan – Pat