我想使用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框架,你可以写你自己的类似泛型方法