web-dev-qa-db-fra.com

Assertions JUnit: faire l'assertion entre flottants

J'ai besoin de comparer deux valeurs: l'une une chaîne et l'autre est float donc je convertis la chaîne en float puis j'essaye d'appeler assertEquals(val1,val2) mais ce n'est pas autorisé, je suppose que le assertEquals doesn n'accepte pas float comme arguments.

Quelle est la solution pour moi dans ce cas?

36
lola

Vous devez fournir un delta à l'assertion pour Floats:

Assert.assertEquals(expected, actual, delta)

Alors que delta est la différence maximale (delta) entre les valeurs attendues et réelles pour laquelle les deux nombres sont toujours considérés comme égaux.

Assert.assertEquals(0.0012f, 0.0014f, 0.0002); // true
Assert.assertEquals(0.0012f, 0.0014f, 0.0001); //false
79
oers

Une valeur delta de 0,0f fonctionne également, donc pour les comparaisons à l'ancienne "==" (à utiliser avec précaution!), Vous pouvez écrire

Assert.assertEquals(expected, actual, 0.0f);

au lieu de

Assert.assertEquals(expected, actual); // Deprecated
Assert.assertTrue(expected == actual); // Not JUnit

J'aime la façon dont JUnit garantit que vous avez vraiment pensé au "delta" qui ne devrait être que 0.0f dans des cas vraiment triviaux.

7
RedXIII