121 votes

JUnit 4 comparer des Collections

Comment voulez-vous succinctement affirmer l'égalité des collections éléments, notamment un Set en JUnit 4?

122voto

Bill the Lizard Points 147311

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.

48voto

Matt Friedman Points 616

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.

16voto

dfa Points 54490

avec hamcrest:

assertThat(s1, is(s2));

avec la plaine d'affirmer:

assertEquals(s1, s2);

NB:t la méthode equals() de l' ensemble de la classe est utilisé

7voto

Arkadiy Points 10567

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.

4voto

jayunit100 Points 6468

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"/>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X