Comment affirmeriez-vous succinctement l'égalité des Collection
éléments, en particulier a Set
dans JUnit 4?
102
Comment affirmeriez-vous succinctement l'égalité des Collection
éléments, en particulier a Set
dans JUnit 4?
Réponses:
Vous pouvez affirmer que les deux
Set
s sont égaux l'un à l'autre, ce qui appelle laSet
equals()
méthode .Cela
@Test
passera si les deuxSet
s sont de la même taille et contiennent les mêmes éléments.la source
equals
ethashCode
implémenté dans la classe que vous stockez dans votre Hashtable?Apache commons à nouveau à la rescousse.
Fonctionne comme un charme. Je ne sais pas pourquoi mais j'ai trouvé qu'avec les collections, ce qui suit
assertEquals(coll1, coll2)
ne fonctionne pas toujours. Dans le cas où cela a échoué pour moi, j'avais deux collections soutenues par des ensembles. Ni hamcrest ni junit ne diraient que les collections étaient égales même si je savais avec certitude qu'elles l'étaient. En utilisant CollectionUtils, cela fonctionne parfaitement.la source
avec hamcrest :
avec une affirmation claire:
NB: t la méthode equals () de la classe d'ensemble concrète est utilisée
la source
Un cas particulièrement intéressant est celui de la comparaison
et
Jusqu'à présent, la seule solution que je vois est de changer les deux en ensembles
Ou je pourrais les comparer élément par élément.
la source
En tant que méthode supplémentaire basée sur un tableau ... vous pouvez envisager d'utiliser des assertions de tableau non ordonnées dans junitx. Bien que l'exemple Apache CollectionUtils fonctionne, il existe également un ensemble d'extensions d'assertions solides:
Je pense que le
L'approche sera beaucoup plus lisible et déboguable pour vous (toutes les collections prennent en charge toArray (), il devrait donc être assez facile d'utiliser les méthodes ArrayAssert.
Bien sûr, l'inconvénient est que junitx est un fichier jar supplémentaire ou une entrée maven ...
la source
Consultez cet article . Un exemple à partir de là:
la source
Utilisation de Hamcrest:
Cela fonctionne également lorsque les ensembles ont des types de données différents et signale la différence au lieu de simplement échouer.
la source
Si vous souhaitez vérifier si une liste ou un ensemble contient un ensemble de valeurs spécifiques (au lieu de le comparer avec une collection déjà existante), la méthode toString des collections est souvent pratique:
C'est un peu plus court que de commencer par construire la collection attendue et de la comparer avec la collection réelle, et plus facile à écrire et à corriger.
(Certes, ce n'est pas une méthode particulièrement propre, et ne peut pas distinguer un élément "foo, bar" de deux éléments "foo" et "bar". Mais en pratique, je pense qu'il est le plus important qu'il soit facile et rapide d'écrire des tests , sinon de nombreux développeurs ne le feront pas sans être pressés.)
la source
J'aime la solution de Hans-Peter Störr ... Mais je pense qu'elle n'est pas tout à fait correcte.
containsInAnyOrder
N'accepte malheureusement pas unCollection
des objets à comparer. Il faut donc que ce soit unCollection
deMatcher
s:Les importations sont:
la source