Le risposte non sono aggiornate. Se il bug è stato corretto, quando e in quali versioni di quale assembly?
Questo è corretto, è stato risolto in VS2013 con l'assembly Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll, versione 10.0.0.0. Presente nella versione precedente di GAC, c: \ windows \ assembly, ha anche la versione 10.1.0.0.
C'è una storia di inferno DLL qui, la versione 10.1.0.0 era quella usata in VS2010. Aveva l'errore, non controllando correttamente Double.NaN. Microsoft ha commesso un errore, hanno risolto 10.1.0.0 ma non hanno modificato il numero di versione. Quindi chiunque abbia installato VS2010 dopo l'installazione di VS2013 si farà male, sta per sovrascrivere la DLL con la versione buggata.
Unraveling DLL L'inferno non è mai così semplice, ma viene visualizzato dal e dal modo in cui funziona sulla mia macchina che hanno identificato la modalità di errore dal reclamo del cliente. E ha fornito una correzione, consegnata in un aggiornamento. Non chiaro quale, dopo luglio 2014. Ora utilizzerai v10.0.0.0, il test runner MSTest.exe e QTAgents hanno un file .config con un <bindingRedirect>
che reindirizza da 10.1.0.0 a 10.0.0.0 (non è un errore di battitura). Assicurati di ottenere l'ultimo aggiornamento, attualmente 4. Cerca in Aiuto + Informazioni se non sei sicuro di quale aggiornamento hai installato.
Per la cronaca, il codice fisso acquistato controlli specifici per Double.NaN, sembra che questo:
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 entrata bug: https://connect.microsoft.com/VisualStudio/feedback/details/ 762286/unit-test-with-assert-areequal-2-3-double-nan-0-1-passa – jbe
E gli idioti lo hanno chiuso come "design". –
Interessante, perché MS ritrattato e dice che è stato risolto: http://connect.microsoft.com/VisualStudio/feedback/details/780654/assert-equal-and-double-nan – Pat