Java ArrayList等式JUnit测试
我想将assertArrayEquals(ArrayList,ArrayList)与这些参数(即令牌的ArrayList)一起使用。但是Java告诉我需要创建这样一个方法。有没有办法测试Junit中两个任何类型的ArrayList是否相等 如果您使用的是一些现成的junit框架,如unitils等,那么它们有assertReflectionEquals(类似于其他框架)等方法,您可以使用反射来访问任意两个对象。如果您没有使用任何第三方junit框架,那么可以编写自己的类似通用方法 我想将assertArrayEquals(ArrayList,ArrayList)与这些参数(即令牌的ArrayList)一起使用。但是Java告诉我需要创建这样一个方法 它告诉您需要创建方法,因为JUnit库中没有这样的方法。JUnit库中没有这样的方法,因为Java ArrayList等式JUnit测试,java,junit,Java,Junit,我想将assertArrayEquals(ArrayList,ArrayList)与这些参数(即令牌的ArrayList)一起使用。但是Java告诉我需要创建这样一个方法。有没有办法测试Junit中两个任何类型的ArrayList是否相等 如果您使用的是一些现成的junit框架,如unitils等,那么它们有assertReflectionEquals(类似于其他框架)等方法,您可以使用反射来访问任意两个对象。如果您没有使用任何第三方junit框架,那么可以编写自己的类似通用方法 我想将asse
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));
ImaginemyArraylist
是一个数组列表,其内容为“一”、“二”、“三”
这很好:
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实现。