ArrayList 相等 JUnit 测试

新手上路,请多包涵

我想将 assertArrayEquals(ArrayList<Token>, ArrayList<Token>) 与这些参数(即令牌数组列表)一起使用。但是 Java 告诉我需要创建这样一个方法。有没有办法在 Junit 中测试任何类型的两个 arrayLists 是否相等?

原文由 robinhood91 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 969
2 个回答

我想将 assertArrayEquals(ArrayList<Token>, ArrayList<Token>) 与这些参数(即令牌数组列表)一起使用。但是 Java 告诉我需要创建这样一个方法。

它告诉您需要创建方法,因为 JUnit 库中没有这样的方法。 JUnit 库中没有这样的方法,因为 assertArrayEquals 用于比较 _数组_,而 ArrayList 不是 数组——它是 List -b7-fb6。

有没有办法在 Junit 中测试任何类型的两个 arrayLists 是否相等?

You can check the equality of two ArrayLists (really, any two List objects) using equals , so you should be able to use JUnit’s assertEquals 方法,它将正常工作。

原文由 DaoWen 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题