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