我认为那应该是一个非常简单的问题。但是不知何故我无法在Google中找到答案。
假设我有2个字符串列表。第一个包含 “字符串A”和“字符串B” ,第二个包含 “字符串B”和“字符串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 。
正如您提到使用Hamcrest一样,我会选择Matchers之一
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.junit.Assert.assertThat; public class CompareListTest { @Test public void compareList() { List<String> expected = Arrays.asList("String A", "String B"); List<String> actual = Arrays.asList("String B", "String A"); assertThat("List equality without order", actual, containsInAnyOrder(expected.toArray())); } }