2014-04-19 1 views
1

J'ai deux listes d'objets. Ces objets font référence à d'autres objets qui à leur tour contiennent des doubles. Je veux utiliser assertEquals pour tester que les deux objets sont identiques. J'ai vérifié à la main qu'ils le sont, mais assertEquals retourne toujours faux. Je pense que la raison en est que les doubles ne sont pas les mêmes en raison de problèmes de précision. Je sais que je peux résoudre ce problème en explorant les champs doubles et en utilisant assertEquals (d1, d2, delta), mais cela semble lourd. Y at-il de toute façon à fournir un delta à assertEquals (ou une autre méthode), de sorte qu'il peut utiliser ce delta chaque fois qu'il rencontre des doubles à comparer?Junit assertEquals sur les objets à double champ

Répondre

0

Hamcrest matchers peut rendre cela un peu plus facile. Vous pouvez créer un Matcher personnalisé (ou FeatureMatcher - Is there a simple way to match a field using Hamcrest?), puis le composer avec un closeTo pour tester les doublons, puis utiliser les coupleurs de conteneurs (How do I assert an Iterable contains elements with a certain property?) pour vérifier la liste.

Par exemple, pour vérifier une liste contenant exactement un Thing, qui a une méthode getValue retour environ 10:

Matcher<Thing> thingWithExpectedDouble = 
    Matchers.<Thing>hasProperty("value", Matchers.closeTo(10, 0.0001)); 
assertThat(listOfItems, Matchers.contains(thingWithExpectedDouble)); 
Questions connexes