Я хочу использовать assertArrayEquals(ArrayList<Token>, ArrayList<Token>)
с этими аргументами (т.е. arrayList из токенов). Но Java говорит мне, что мне нужно создать такой метод. Есть ли способ проверить равенство двух списков массивов любого типа в Junit?
Проверка равенства ArrayList JUnit
Ответ 1
Я хочу использовать
assertArrayEquals(ArrayList<Token>, ArrayList<Token>)
с этими аргументами (т.е. arrayList из токенов). Но Java говорит мне, что мне нужно создать такой метод.
Он говорит вам, что вам нужно создать метод, потому что такого метода нет в библиотеке JUnit. В библиотеке JUnit такого метода нет, потому что assertArrayEquals
предназначен для сравнения массивов, а ArrayList
не является массивом - это a List
.
Есть ли способ проверить равенство двух списков массивов любого типа в Junit?
Вы можете проверить равенство двух ArrayLists
(действительно, любых двух объектов List
), используя equals
, так что вы должны уметь использовать JUnit assertEquals
метод, и он будет работать нормально.
Ответ 2
То, что вы, вероятно, хотите использовать, - void org.junit.Assert.assertArrayEquals(Object[] expecteds, Object[] actuals)
. Вам просто нужно преобразовать List в массив с помощью метода 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 и перенос вашего списка в Set, например:
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;
Ответ 4
попробовать
Assert.assertEquals(Object expected, Object actual);
он отлично работает с коллекциями
Ответ 5
Если вы используете какие-то рамки рамки junit на полке, такие как unitils и т.д., у них есть методы вроде assertReflectionEquals (аналогично другой фреймворке), где вы можете использовать любые два объекта, использующих отражение. Если вы не используете какую-либо стороннюю структуру junit, вы можете написать свой собственный аналогичный общий метод.
Ответ 6
Вы можете переопределить метод "равно" или "хэш-код" типа элемента, например: ArralyList, ArrayList - (либо примитивный тип данных, либо пользовательский элемент данных), вы можете переопределить метод и сравнить все свои данные внутри этого метода и вернуть true/ложь соответственно.
Затем вы можете напрямую использовать assertEquals (arraylist1, arraylist2) для теста junit.
Ниже приведен пример класса объектов
public class Customer {
String name;
int age;
@Override
public boolean equals(Object obj) {
if(this == obj)
return true;
// it checks if the argument is of the type Customer by comparing the classes
// of the passed argument and this object.
// if(!(obj instanceof Customer)) return false; ---> avoid.
if(obj == null || obj.getClass()!= this.getClass())
return false;
// type casting of the argument.
Customer customer = (Customer) obj;
if(customer.getName().equals(this.name) &&
(customer.getAge() == this.age))
return true;
return false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Ниже приведен пример класса для теста Junit:
public class CustomerTest {
@Test
public void testCustomerMatch() {
ArrayList<Customer> expectedCustomerListOutput; // add your data in this list
ArrayList<Customer> actualCustomerListOutput;// add your data in this list
//used the overridden equal method of trade objects
assertEquals(expectedTradeOutput, actualTradeMatchList);
}
}