开发者社区> 问答> 正文

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 726 0
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
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载