开发者社区 问答 正文

AssertEquals 2列表忽略顺序

我认为那应该是一个非常简单的问题。但是不知何故我无法在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。 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-09 11:56:44 772 分享 版权
1 条回答
写回答
取消 提交回答
  • 正如您提到使用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()));
    }
    

    }

    2020-02-09 11:56:55
    赞同 展开评论
问答地址: