Проверка равенства ArrayList JUnit

Я хочу использовать assertArrayEquals(ArrayList<Token>, ArrayList<Token>) с этими аргументами (т.е. arrayList из токенов). Но Java говорит мне, что мне нужно создать такой метод. Есть ли способ проверить равенство двух списков массивов любого типа в 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);
}

}