我想将 assertArrayEquals(ArrayList<Token>, ArrayList<Token>)
与这些参数(即令牌数组列表)一起使用。但是 Java 告诉我需要创建这样一个方法。有没有办法在 Junit 中测试任何类型的两个 arrayLists 是否相等?
原文由 robinhood91 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想将 assertArrayEquals(ArrayList<Token>, ArrayList<Token>)
与这些参数(即令牌数组列表)一起使用。但是 Java 告诉我需要创建这样一个方法。有没有办法在 Junit 中测试任何类型的两个 arrayLists 是否相等?
原文由 robinhood91 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可能想要使用的是 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());
不要忘记导入这个断言。
import static org.junit.Assert.assertArrayEquals;
但是此方法仅在两个列表中的项目具有相同顺序时才有效。如果不能保证顺序,那么您需要使用 Collections.sort()
方法对列表进行排序,但您的对象需要使用一种方法实现 java.util.Comparable
接口 int compareTo(T o)
PS:另一种可能的解决方案是使用 assertEquals 并将列表包装到 Set 中,如下所示:
assertEquals(new HashSet<Token>(list1), new HashSet<Token>(list2));
原文由 edufinn 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
它告诉您需要创建方法,因为 JUnit 库中没有这样的方法。 JUnit 库中没有这样的方法,因为
assertArrayEquals
用于比较 _数组_,而ArrayList
不是 数组——它是List
-b7-fb6。You can check the equality of two
ArrayLists
(really, any twoList
objects) usingequals
, so you should be able to use JUnit’sassertEquals
方法,它将正常工作。