我想使用assertArrayEquals(ArrayList<Token>, ArrayList<Token>)with这些参数(即tolist的arrayList).但Java告诉我,我需要创建这样一个方法.有没有办法测试Junit中任何类型的两个arrayLists的相等性?
Dao*_*Wen 24
我想使用
assertArrayEquals(ArrayList<Token>, ArrayList<Token>)with这些参数(即tolist的arrayList).但Java告诉我,我需要创建这样一个方法.
它告诉你需要创建方法,因为JUnit库中没有这样的方法.没有在JUnit库这样的方法,因为assertArrayEquals是比较阵列,并且和ArrayList是不阵列-这是一个List.
有没有办法测试Junit中任何类型的两个arrayLists的相等性?
您可以检查两个ArrayLists(实际上,任何两个List对象)的相等性equals,因此您应该能够使用JUnit的assertEquals方法,它将正常工作.
尝试
Assert.assertEquals(Object expected, Object actual);
Run Code Online (Sandbox Code Playgroud)
它与 Collections 配合得很好
想象myArraylist是一个包含内容的数组列表"one", "two", "three"
这工作正常:
List<String> categories = asList("one", "two", "three");
assertTrue(myArraylist.equals(categories));
Run Code Online (Sandbox Code Playgroud)
不要忘记导入: import static java.util.Arrays.asList;
您可能想使用的是void org.junit.Assert.assertArrayEquals(Object[] expecteds, Object[] actuals)。您只需要使用toArray()方法将List转换为数组,就像这样:
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());
Run Code Online (Sandbox Code Playgroud)
不要忘记导入此断言。
import static org.junit.Assert.assertArrayEquals;
Run Code Online (Sandbox Code Playgroud)
但是,仅当两个列表中的项目具有相同顺序时,此方法才有效。如果不能保证顺序,则需要使用Collections.sort()方法对列表进行排序,但是您的对象需要java.util.Comparable使用一种方法实现接口int compareTo(T o)。
PS:另一个可能的解决方案是使用assertEquals并将您的列表包装到Set中,如下所示:
assertEquals(new HashSet<Token>(list1), new HashSet<Token>(list2));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53505 次 |
| 最近记录: |