【发布时间】:2014-05-13 11:49:41
【问题描述】:
我相信这应该是一个非常简单的问题。但不知何故,我无法在 Google 中找到答案。
假设我有 2 个字符串列表。第一个包含 "String A" 和 "String B",第二个包含 "String B" 和 "String A"(注意顺序不同)。我想用 JUnit 对它们进行测试,以检查它们是否包含 完全相同的字符串。
是否有任何断言检查忽略顺序的字符串的相等性?对于给定的示例 org.junit.Assert.assertEquals 抛出 AssertionError
java.lang.AssertionError: expected:<[String A, String B]> but was:<[String B, String A]>
解决方法是首先对列表进行排序,然后将它们传递给断言。但我希望我的代码尽可能简单干净。
我使用 Hamcrest 1.3、JUnit 4.11、Mockito 1.9.5。
【问题讨论】:
-
list1.removeAll(list2)应将list1留空。我想你可以在此基础上得到你想要的。 -
containsAll和removeAll是O(n²)用于列表,同时对它们进行排序并测试是否相等是O(nlogn)。Collections.sort(list1); Collections.sort(list2); assertTrue(list1.equals(list2));也很干净。 -
@SudoRahul - 如果您不想通过删除所有来修改列表怎么办?
-
@BoratSagdiyev - 由于这不是 OP 的限制,我建议这样做。但如果这是一个限制条件,那么这个问题的公认答案就可以解决手头的问题。
标签: java arrays unit-testing junit assertion