Domanda

stavo facendo qualche unità di test sul posto di lavoro e un errore peculiare spuntato per una delle affermazioni. Si noti che expectedValue e ActualValue sono entrambe doppie.

Assert.AreEqual(expectedValue, actualValue);

L'eccezione ha dichiarato che non erano uguali, elaborando quel "valore atteso: <6.8> valore effettivo:. <6.8>"

Il valore previsto è un hard coded 6.8 e il valore effettivo è formulata utilizzando i valori di database che passano attraverso i nostri metodi di classificazione (come la parità Records, o Jenks Natural Breaks).

La mia ipotesi è che la differenza è probabilmente che le mantisse dei 2 valori siano simili fino a quando il bit meno significativo. Ho aggiornato le prove per includere un Epsilon da trovare se i due valori sono abbastanza vicino, ma sono curioso di se c'è un modo per forzare la mantissa per corrispondere con il valore di visualizzazione di se ho mostrato che la doppia. Fa come una mantissa correzione esiste?

È stato utile?

Soluzione

Non sono del tutto sicuro di cosa si intende per costringere la mantissa modo che corrisponda al valore di visualizzazione ... c'è sono senza valori doppi che sono esattamente 0,1, per esempio.

Se volete un po 'di codice per visualizzare il esattamente valore di una doppia, però, ho un DoubleConverter.cs di file che lo rende facile:

 double d = 0.1;
 string x = DoubleConverter.ToExactString(d);

Un'altra alternativa è quella di utilizzare l'identificatore di formato di andata e ritorno ( "r") quando si converte un doppio a stringa - che garantisce che il risultato è abbastanza informazioni per riprodurre lo stesso valore esatto più tardi. In altre parole, se x != y, quindi x.ToString("r") != y.ToString("r").

Altri suggerimenti

Si potrebbe convertire sia in una stringa: actualValue.ToString("0.000") e confrontare quelle corde.

Questo potrebbe essere fatto per corrispondere al meglio le vostre esigenze.

Se si desidera verificare se i valori di visualizzazione di default corrispondono, basta confrontare i valori di visualizzazione di default:

Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top