2013-03-17 4 views
5

Я хочу использовать assertArrayEquals(ArrayList<Token>, ArrayList<Token>) с этими аргументами (т. Е. ArrayList из токенов). Но Java говорит мне, что мне нужно создать такой метод. Есть ли способ проверить равенство двух списков массивов любого типа в Junit?Равновесие ArrayList Проверка JUnit

+1

Нормальный 'assertEquals' должен отлично работать для' ArrayList '. –

+2

@Bohemian: Я не верю в это. 'Список.equals' проверяет равенство элемента за элементом, а 'assertEquals' использует метод' equals'. –

+0

@LouisWasserman woops! вы правы :) – Bohemian

ответ

14

Я хочу использовать assertArrayEquals(ArrayList<Token>, ArrayList<Token>) с этими аргументами (то есть ArrayList лексем). Но Java говорит мне, что мне нужно создать такой метод.

Сообщаем вам, что вам нужно создать метод, потому что такого метода нет в библиотеке JUnit. Существует не такой метод в библиотеке JUnit, поскольку assertArrayEquals для сравнения массивов, а и ArrayListэто не массив-это List.

Есть ли способ проверить равенство двух списков массивов любого типа в Junit?

Вы можете проверить равенство двух ArrayLists (на самом деле, любые два List объектов) с помощью equals, так что вы должны быть в состоянии использовать assertEquals метод JUnit и он будет работать нормально.

+0

Выполняется ли проверка 'asserEquals' на основе переопределения' equals () 'метод? – Ram

+0

@Ram - Да, он будет использовать переопределенную равную реализацию для списков. – DaoWen

0

Если вы используете какие-то рамки рамки юнита, такие как unitils и т. Д., У них есть методы, подобные assertReflectionEquals (аналогично другим фреймворкам), где вы можете использовать любые два объекта, используя отражение. Если вы не используете рамки стороннего JUnit, вы можете написать свой собственный аналогичный общий метод

+7

Guys Downvote замечательный, но на самом деле его раздражает, когда кто-то сбивает с толку, не давая обратной связи, его раздражает. Это не дает шанса плакату улучшить в следующий раз –

2

попробовать

Assert.assertEquals(Object expected, Object actual); 

он отлично работает с коллекциями

4

То, что вы, вероятно, хотите использовать void org.junit.Assert.assertArrayEquals(Object[] expecteds, Object[] actuals). Вам просто нужно, чтобы преобразовать список в массив с toArray() способом, как и что:

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()); 

Не забудьте импортировать Assert.

import static org.junit.Assert.assertArrayEquals; 

Но эти методы работают только в том случае, если элементы в обоих списках имеют одинаковый порядок. Если заказ не гарантирован, вам необходимо отсортировать списки с помощью метода Collections.sort(), но ваш объект должен реализовать интерфейс java.util.Comparable одним способом int compareTo(T o).

PS: Другим возможным решением является использование assertEquals и обернуть список в набор, как и что:

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

Представьте myArraylist приведен список массив с содержанием "one", "two", "three"

Это прекрасно работает:

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

Не забывайте импортировать: import static java.util.Arrays.asList;

Смежные вопросы