加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JUnit:使用参数化类型 – 数组断言集合的相等性

发布时间:2020-12-15 04:10:45 所属栏目:Java 来源:网络整理
导读:我试图断言以下集合的平等: String[] arr1= new String[] { "1","2","3" };CollectionString[] coll1= Arrays.asList(arr1,arr1);String[] arr2 = new String[] { "1","3" };CollectionString[] coll2 = Arrays.asList(arr2,arr2);assertEquals(coll1,coll2
我试图断言以下集合的平等:

String[] arr1= new String[] { "1","2","3" };
Collection<String[]> coll1= Arrays.asList(arr1,arr1);

String[] arr2 = new String[] { "1","3" };
Collection<String[]> coll2 = Arrays.asList(arr2,arr2);

assertEquals(coll1,coll2);

但是,我得到了与预期相反的结果 – 断言错误.问题是使用Object.equals()方法检查数组是否相等,它实际上检查了明显不同的数组的引用.

有没有方便的方法我可以使用JUnit或Guava来解决这个问题?

编辑:请注意,我想比较Collection对象,而不是数组本身.

解决方法

这就是Hamcrest来到rescque的地方.这是javadoc link.我建议使用 IsArrayContainingInOrder

所以…

assertThat(coll1,IsArrayContainingInOrder.arrayContaining(coll2));

抱歉,以上内容适用于阵列,但下面的内容适用于集合……

assertThat(coll1,IsIterableContainingInOrder.contains(coll2.toArray()));

这使用IsIterableContainingInOrder

仅供参考,我发现使用Hamcrest匹配器如此优雅,以至于我很少使用非Hamcrest测试.所以我的所有测试都是这样的

assertThat(myValue,is(true));
assertThat(myValue,equalTo("something"));
assertThat(myList,IsIterableContainingInAnyOrder.containsInAnyOrder(first,second,third));

关于肥皂盒.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读