2013-03-17 4 views
5

Je souhaite utiliser le assertArrayEquals(ArrayList<Token>, ArrayList<Token>) avec ces arguments (c'est-à-dire arrayList of tokens). Mais Java me dit que j'ai besoin de créer une telle méthode. Existe-t-il un moyen de tester l'égalité de deux arrayLists de n'importe quel type dans Junit?ArrayList égalité JUnit testing

+1

Le 'assertEquals' normal devrait fonctionner très bien pour' ArrayList '. –

+2

@Bohemian: Je ne le crois pas. 'Liste.equals' vérifie l'égalité élément par élément, et 'assertEquals' utilise la méthode' equals'. –

+0

@LouisWasserman woops! vous avez raison :) – Bohemian

Répondre

14

Je veux utiliser le assertArrayEquals(ArrayList<Token>, ArrayList<Token>) avec ces arguments (à savoir arrayList de jetons). Mais Java me dit que j'ai besoin de créer une telle méthode.

Il vous indique que vous devez créer la méthode car il n'existe aucune méthode de ce type dans la bibliothèque JUnit. Il n'y a pas une telle méthode dans la bibliothèque JUnit parce que assertArrayEquals est pour comparer tableaux, et et ArrayList est pas un tableau-c'est List.

Existe-t-il un moyen de tester l'égalité de deux arrayLists de n'importe quel type dans Junit?

Vous pouvez vérifier l'égalité de deux ArrayLists (vraiment, tout deux List objets) en utilisant equals, vous devriez être en mesure d'utiliser la méthode assertEquals de JUnit et il fonctionne très bien.

+0

Est-ce que le 'asserEquals' vérifie basé sur override' égal () 'méthode? – Ram

+0

@Ram - Oui, il utilisera l'implémentation equals substituée pour les listes. – DaoWen

0

Si vous utilisez un framework Junit standard comme unitils etc, ils ont des méthodes comme assertReflectionEquals (similaire à d'autres cadres) où vous pouvez utiliser deux objets en utilisant la réflexion. Si vous n'utilisez un framework JUnit tiers, vous pouvez écrire votre propre méthode générique similaire

+7

Les gars Downvote est génial mais vraiment son énervant quand quelqu'un downvote sans donner aucun retour son irritant .Il ne donne pas chance à poster pour améliorer la prochaine fois –

2

essayer

Assert.assertEquals(Object expected, Object actual); 

il fonctionne très bien avec les collections

4

Ce que vous voulez probablement utiliser est void org.junit.Assert.assertArrayEquals(Object[] expecteds, Object[] actuals). Vous avez juste besoin de convertir Liste de tableau avec méthode toArray(), comme ça:

ArrayList<Token> list1 = buildListOne(); // retrieve or build list 
ArrayList<Token> list2 = buildListTwo(); // retrieve or build other list with same items 

assertArrayEquals(list1.toArray(), list2.toArray()); 

Ne pas oublier d'importer cette assertion.

import static org.junit.Assert.assertArrayEquals; 

Mais cette méthode ne fonctionne que si les éléments des deux listes ont le même ordre. Si la commande n'est pas garantie, vous devez trier les listes avec la méthode Collections.sort(), mais votre objet doit implémenter l'interface java.util.Comparable avec une méthode int compareTo(T o).

PS: L'autre solution possible est d'utiliser assertEquals et envelopper votre liste dans Set, comme ça:

assertEquals(new HashSet<Token>(list1), new HashSet<Token>(list2)); 
3

Imaginer myArraylist est une liste de tableau avec le contenu "one", "two", "three"

Cela fonctionne bien:

List<String> categories = asList("one", "two", "three"); 
assertTrue(myArraylist.equals(categories)); 

Ne pas oublier d'importer: import static java.util.Arrays.asList;