2009-11-02 5 views
3

Existe-t-il des bonnes/meilleures pratiques pour traiter les valeurs à virgule flottante lors de la vérification des résultats avec le cadre d'ajustement?Précision des virgules flottantes dans les tests FIT

Notre application fait beaucoup de calculs. Dans la plupart des cas, vérifier des valeurs avec une précision de plus de 6 ou 8 chiffres n'a aucun sens. Donc, je voudrais spécifier la précision qui est utilisée lors de la comparaison des valeurs attendues et réelles. Ma solution de force brute serait de définir une valeur de précision, puis comparer les valeurs dans mon ColumnFixture contenant les cas de test.

Cela se traduirait par quelque chose comme:

!|info.fitnesse.fixturegallery.ColumnFixtureTest| 
|firstSummand|secondSummand|precision|expectedResult|calculateSumAndCheck()| 
|2.1|3.3|0.0001|5.3|true| 

L'inconvénient majeur de cette approche serait que je ne serais pas en mesure d'utiliser les fonctionnalités de comparer en forme, mais écrire mes propres petits.

Répondre

2

Vous pouvez utiliser une mise en forme de chaîne cohérente pour vos types de virgule flottante et comparer une chaîne à une chaîne. Fit fait vraiment un ToString() sur vos valeurs et compare avec le texte de votre wiki, donc si vous fournissez votre propre formatage de chaîne, vous n'avez pas besoin de modifier les comparaisons intégrées dans Fit. Vous n'avez pas spécifié de langage, mais en C#, par exemple, vous pouvez utiliser une méthode d'aide statique ou une méthode d'extension pour les types à virgule flottante (float, double, etc.) appelées quelque chose comme "ToStringForComparison() ". Tous vos harnais de test devraient utiliser ceci dans les accesseurs de propriété pour les valeurs que vous voulez comparer dans vos tests.

Edit:

Si vous souhaitez contrôler la précision, vous pouvez le faire en passant de la valeur de précision dans votre fonction de formatage, tout en maintenant une valeur par défaut pour les valeurs où la précision est sans importance.

+0

Bonne idée! Il y a juste un problème avec ça. Nos résultats sont souvent des valeurs approximatives déterminées par itération. Les experts de notre domaine calculent les résultats par ex. via MS Excel. Ensuite, ils obtiennent par exemple le prix = 3.45664. Puis ils entrent cette valule attendue dans le wiki. Ensuite, ils spécifient la précision, c'est-à-dire 0.01. Il serait très gênant pour eux d'être contraints d'éditer leur résultat à 3.46. Donc je pense que je vais créer mes propres classes RoundedDoubleTypeAdapter et RoundedDouble. – jens

Questions connexes