Comment voulez-vous succinctement affirmer l'égalité des collections
éléments, notamment un Set
en JUnit 4
?
Réponses
Trop de publicités?Vous pouvez simplement affirmer que les deux Ensembles sont égaux l'un à l'autre, qui invoque l'Ensemble méthode equals() .
public class SimpleTest {
private Set<String> setA;
private Set<String> setB;
@Before
public void setUp() {
setA = new HashSet<String>();
setA.add("Testing...");
setB = new HashSet<String>();
setB.add("Testing...");
}
@Test
public void testEqualSets() {
assertEquals( setA, setB );
}
}
Ce test va passer si les deux Jeux sont de la même taille et contiennent les mêmes éléments.
Apache commons à nouveau à la rescousse.
assertTrue(CollectionUtils.isEqualCollection(coll1, coll2));
Fonctionne comme un charme. Je ne sais pas pourquoi, mais j'ai trouvé qu'avec des collections assertEquals(coll1, coll2)
ne fonctionne pas toujours. Dans le cas où il a échoué pour moi, j'ai eu deux collections soutenu par des Jeux. Ni hamcrest ni junit dirais que les collections étaient égaux, même si je savais qu'ils étaient. À l'aide de CollectionUtils, il fonctionne parfaitement.
Un cas intéressant est lorsque vous comparez des
java.util.Arrays$ArrayList<[[name,value,type], [name1,value1,type1]]>
et
java.util.Collections$UnmodifiableCollection<[[name,value,type], [name1,value1,type1]]>
Jusqu'à présent, la seule solution que je vois est de changer les deux en jeux
assertEquals(new HashSet<CustomAttribute>(customAttributes), new HashSet<CustomAttribute>(result.getCustomAttributes()));
Ou je pourrais les comparer élément par élément.
Comme une méthode supplémentaire qui est basé sur les tableau ... vous pouvez envisager d'utiliser des non-ordonnée tableau des assertions dans junitx . Bien que l'Apache CollectionUtils exemple, il y a un paquet de solides affirmation des extensions il y a ainsi :
Je pense que l'
ArrayAssert.assertEquivalenceArrays(new Integer[]{1,2,3}, new Integer[]{1,3,2});
l'approche sera beaucoup plus lisible et debuggable pour vous (toutes les Collections de soutien toArray(), donc ça devrait être assez facile à utiliser le ArrayAssert méthodes.
Bien sûr, l'inconvénient est que, junitx supplémentaire est un fichier jar ou maven entrée...
<dependency org="junit-addons" name="junit-addons" rev="1.4"/>