gpt4 book ai didi

java - JUnit:断言集合与参数化类型 - 数组相等

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:28:35 24 4
gpt4 key购买 nike

我正在尝试断言以下集合的相等性:

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

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

assertEquals(coll1, coll2);

然而,我得到了与预期相反的结果——一个断言错误。问题在于使用 Object.equals() 方法检查数组是否相等,该方法实际上检查明显不同的数组的引用。

我可以从 JUnit 或 Guava 中使用任何方便的方法来解决这个问题吗?

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

最佳答案

这是 Hamcrest 来救援的地方。这是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));

关闭肥皂盒。

关于java - JUnit:断言集合与参数化类型 - 数组相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com