ArrayList的平等的JUnit测试(ArrayList equality JUnit test

2019-08-17 16:00发布

我想使用assertArrayEquals(ArrayList<Token>, ArrayList<Token>)与这些参数(即,代币的ArrayList)。 但Java告诉我,我需要创造这样的方法。 有没有一种方法来测试任何类型的两个的ArrayList的JUnit中的平等?

Answer 1:

我想使用assertArrayEquals(ArrayList<Token>, ArrayList<Token>)与这些参数(即,代币的ArrayList)。 但Java告诉我,我需要创造这样的方法。

它告诉你,你需要创建方法因为在JUnit库中没有这样的方法。 没有在JUnit库这样的方法,因为assertArrayEquals是用于比较阵列以及和ArrayList 不是数组-它是一个List

有没有一种方法来测试任何类型的两个的ArrayList的JUnit中的平等?

您可以检查两个平等ArrayLists (说真的,任何两个List对象)使用equals ,所以你应该能够使用JUnit的assertEquals方法,它会工作得很好。



Answer 2:

你可能想使用什么是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));


Answer 3:

试想myArraylist是一个数组列表,内容与"one", "two", "three"

这工作正常:

 List<String> categories = asList("one", "two", "three");
 assertTrue(myArraylist.equals(categories));

不要忘记导入: import static java.util.Arrays.asList;



Answer 4:

尝试

Assert.assertEquals(Object expected, Object actual);

它正常工作与收藏



Answer 5:

如果您使用的是一些去像unitils等货架JUnit框架,他们有像assertReflectionEquals方法(与之相似的其他框架一样),你可以在任意两个对象使用反射。 如果你不使用任何第三方JUnit框架,你可以写你自己的类似泛型方法



文章来源: ArrayList equality JUnit testing
标签: java junit