ArrayList равенство JUnit тестирование

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

5 ответов


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

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

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

вы можете проверить равенство двух ArrayLists (действительно, любые два List объекты) с помощью equals, поэтому вы должны иметь возможность использовать Junit's assertEquals метод и он будет работать нормально.


что вы, вероятно, хотите использовать 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());

не забудьте импортировать это утверждать.

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

представьте себе,myArraylist - Это список массивов с содержимым "one", "two", "three"

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

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

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


попробовать

Assert.assertEquals(Object expected, Object actual);

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


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