Java ArrayList等式JUnit测试

Java ArrayList等式JUnit测试,java,junit,Java,Junit,我想将assertArrayEquals(ArrayList,ArrayList)与这些参数(即令牌的ArrayList)一起使用。但是Java告诉我需要创建这样一个方法。有没有办法测试Junit中两个任何类型的ArrayList是否相等 如果您使用的是一些现成的junit框架,如unitils等,那么它们有assertReflectionEquals(类似于其他框架)等方法,您可以使用反射来访问任意两个对象。如果您没有使用任何第三方junit框架,那么可以编写自己的类似通用方法 我想将asse

我想将assertArrayEquals(ArrayList,ArrayList)与这些参数(即令牌的ArrayList)一起使用。但是Java告诉我需要创建这样一个方法。有没有办法测试Junit中两个任何类型的ArrayList是否相等

如果您使用的是一些现成的junit框架,如unitils等,那么它们有assertReflectionEquals(类似于其他框架)等方法,您可以使用反射来访问任意两个对象。如果您没有使用任何第三方junit框架,那么可以编写自己的类似通用方法

我想将assertArrayEquals(ArrayList,ArrayList)与这些参数(即令牌的ArrayList)一起使用。但是Java告诉我需要创建这样一个方法

它告诉您需要创建方法,因为JUnit库中没有这样的方法。JUnit库中没有这样的方法,因为
assertArrayEquals
用于比较数组,而
ArrayList
不是数组,而是
列表

有没有办法测试Junit中两个任何类型的ArrayList是否相等

您可以使用检查两个
数组列表
(实际上,任何两个
列表
对象)的相等性,因此您应该能够使用JUnit的
assertEquals
方法,它会很好地工作。

试试看

Assert.assertEquals(Object expected, Object actual);

它可以很好地处理集合

您可能希望使用的是
void org.junit.Assert.assertArrayEquals(对象[]期望值,对象[]实际值)
。您只需使用
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());
assertEquals(new HashSet<Token>(list1), new HashSet<Token>(list2));
但只有当两个列表中的项具有相同的顺序时,这种方法才有效。如果不能保证顺序,那么您需要使用
Collections.sort()
方法对列表进行排序,但是您的对象需要使用一个方法实现
java.util.Comparable
接口
int compareTo(to)

PS:另一种可能的解决方案是使用assertEquals并将列表包装到集合中,如下所示:

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());
assertEquals(new HashSet<Token>(list1), new HashSet<Token>(list2));
assertEquals(新HashSet(list1)、新HashSet(list2));

Imagine
myArraylist
是一个数组列表,其内容为“一”、“二”、“三”

这很好:

 List<String> categories = asList("one", "two", "three");
 assertTrue(myArraylist.equals(categories));
List categories=asList(“一”、“二”、“三”);
assertTrue(myArraylist.equals(categories));
别忘了导入:
import static java.util.Arrays.asList

您可以重写元素类型的“equals”或“hashcode”方法,例如:ArrayList、ArrayList-(基本数据类型或自定义数据元素),您可以重写该方法,并比较该方法中的所有数据,并相应地返回true/false

然后可以直接使用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);
}
公共类客户测试{
@试验
public void testCustomerMatch(){
ArrayList expectedCustomerListOutput;//将数据添加到此列表中
ArrayList actualCustomerListOutput;//将数据添加到此列表中
//使用贸易对象的替代相等方法
assertEquals(预期交易输出、实际交易匹配列表);
}

}正常的
assertEquals
对于
ArrayList
@Bohemian应该没问题:我不相信<代码>列表.equals
检查元素之间的相等性,而且
assertEquals
使用了
equals
方法。伙计们的下一票很好,但当有人下一票却没有给出任何反馈时,这真的很令人恼火。这不会给下次张贴改进的机会
asserEquals
是否基于覆盖
equals()
方法进行检查?@Ram-是,它将对列表使用重写的equals实现。