2010-10-25 4 views
3

Je teste des fonctions mathématiques de base qui renvoient leur moyenne/variance/écart-type. Le problème auquel je suis confronté est que je ne peux pas obtenir la précision de "valeur attendue" pour les mathématiques ce qui est retourné par la fonction. Par exemple, si la fonction de variance renvoie 50.5555555555566, même si je mets la valeur attendue explicitement à 50.5555555555566, elle indiquera qu'il s'agit de deux doubles différents et que le test unitaire échoue.Numéro de test d'unité C# questions de précision

est inférieure à la sortie réelle du test unitaire:

Assert.AreEqual a échoué. Attendu: < 50.5555555555556>. Réel: < 50.5555555555566>.

Quelqu'un peut-il vous conseiller pour contourner ce problème? J'utilise la suite intégrée de tests d'unité de studio visuel. Merci.

+0

Assurez-vous que vous ne comparez pas 'Double's' 'Decimal's. –

+0

50.5555555555556 et 50.5555555555566 sont en effet deux valeurs différentes! –

Répondre

8

Les nombres à virgule flottante (simple/double) doivent être testés avec une valeur de tolérance. Donc, vous pouvez dire si les deux nombres sont dans 0,0001 (tolérance) de l'un l'autre, considérez-les égaux

Dans NUnit, vous avez comparison asserts. par exemple. la surcharge suivante de AreEqual, trouver un équivalent pour MSTest ..

Assert.AreEqual(double expected, double actual, double tolerance, 
       string message); 

Mise à jour: Cela devrait être the method dont vous avez besoin MSTest. Essayez de voir si cela résout votre problème ..

+0

Exactement ce dont j'avais besoin. Je vous remercie! =) – thomas1234