190 votes

Liste d'assert dans Junit

Comment affirmer une liste dans un cas de test JUnit ? Je veux dire non seulement la taille de la liste mais aussi le contenu de la liste.

185voto

djeikyb Points 506

Je réalise que cela a été demandé il y a quelques années, probablement cette fonctionnalité n'était pas autour de l'époque. Mais maintenant, il est facile de simplement faire ceci:

@Test
public void test_array_pass()
{
  List<String> actual = Arrays.asList("fee", "fi", "foe");
  List<String> expected = Arrays.asList("fee", "fi", "foe");

  System.out.println(actual == expected);       // false
  assertThat(actual, is(expected));             // passes
}

Si vous avez une version récente de Junit installé avec hamcrest, il suffit d'ajouter ces importations:

import static org.junit.Assert.*;
import static org.hamcrest.core.Is.is;

http://junit-team.github.io/junit/javadoc/latest/org/junit/Assert.html#assertThat(T, org.hamcrest.Matcher)

http://junit-team.github.io/junit/javadoc/latest/org/hamcrest/core/Is.html

30voto

Andre Fonseca Points 19

Ne pas transformer en chaîne et comparer. Ce n'est pas bon et la performance. Dans le Junit, à l’intérieur de Corematchers, il y a un correctif pour cela => hasItems

 List<Integer> yourList = Arrays.asList(1,2,3,4)    
assertThat(youList, CoreMatchers.hasItems(1,2,3,4,5));
 

C’est le meilleur moyen que je connaisse pour vérifier les éléments d’une liste.

21voto

Bart Kiers Points 79069

C'est un héritage de réponse, adapté pour JUnit 4.3 et au-dessous. La version moderne de JUnit comporte lisible messages d'échec dans la assertThat méthode. Préférez d'autres réponses sur cette question si possible.

List<E> a = resultFromTest();
List<E> expected = Arrays.asList(new E(), new E(), ...);
assertTrue("Expected 'a' and 'expected' to be equal."+
            "\n  'a'        = "+a+
            "\n  'expected' = "+expected, 
            expected.equals(a));

Pour l'enregistrement, comme @Paul a mentionné dans son commentaire à cette réponse, les deux Lists sont égaux:

si et seulement si l'objet spécifié est aussi une liste, les deux listes ont la même taille, et toutes les paires correspondantes des éléments dans les deux listes sont égales. (Deux éléments e1 et e2 sont égaux s' (e1==null ? e2==null : e1.equals(e2)).) En d'autres termes, deux listes sont définies de façon à être égaux s'ils contiennent les mêmes éléments dans le même ordre. Cette définition s'assure que la méthode equals fonctionne correctement à travers les différentes implémentations de l' List interface.

Voir la Javadoc de l' List interface.

8voto

Viktor Nordling Points 1736

Si vous ne vous souciez pas de l'ordre des éléments, je vous recommande ListAssert.assertEquals dans junit-addons.

Lien: http://junit-addons.sourceforge.net/

Pour les utilisateurs paresseux de Maven:

     <dependency>
        <groupId>junit-addons</groupId>
        <artifactId>junit-addons</artifactId>
        <version>1.4</version>
        <scope>test</scope>
    </dependency>
 

4voto

Arun Pratap Singh Points 177

si vous ne voulez pas construire une liste de tableaux, vous pouvez aussi essayer ceci

 @Test
public void test_array_pass()
{
  List<String> list = Arrays.asList("fee", "fi", "foe");
  Strint listToString = list.toString();
  Assert.assertTrue(listToString.contains("[fee, fi, foe]"));   // passes  
}
 

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