JUnit - 比较未知的 Collection 和 ArrayList
JUnit - compare unknown Collection and ArrayList
我想比较 Collection
(产品)(在我的例子中是 LinkedHashMap$LinkedValues
)和 ArrayList
。
测试
assertThat(products, equalTo(Lists.newArrayList(product1, product2, product3)));
不起作用,因为 LinkedValues 没有实现 equals
方法。
所以我将测试更改为:
assertThat(new ArrayList<>(products), equalTo(Lists.newArrayList(product1, product2, product3)));
有没有更好的解决方案,我不必检查集合是否实现了 equals
方法?
假设您使用的数据类型已经有一个 equals 方法,那么就没有必要检查(未)实现的 equals()
函数。否则,您将不得不创建一些东西来比较您正在使用的数据。
附带说明一下,您拥有的两行代码是相同的。你是不是想在第二行放点别的东西?
您可以使用 Arrays.equals
:
assertTrue(Arrays.equals(products.toArray(), new Product[] {product1, product2, product3}));
这会检查数组大小和项目的排序。您的产品 class 应该实现 equals()
才有意义。
请注意,如果需要,您可以使用 ArrayList.toArray()
获取数组。
由于您使用的是 Hamcrest,因此您应该使用名称稍显混乱的方法 Matchers.contains()
。它检查目标集合是否包含与原始集合相同顺序的相同元素。
给出
Map<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("a", "A");
linkedHashMap.put("b", "B");
这将通过:
assertThat(linkedHashMap.values(), contains("A", "B"));
这会失败:
assertThat(linkedHashMap.values(), contains("B", "A"));
请注意,Hamcrest 早已停产,尽管它工作正常并且适用于 99% 的用法,但您会惊讶于 AssertJ 有多好,它提供了多少功能以及断言有多么容易可以。
使用 AssertJ:
assertThat(linkedHashMap.values()).containsExactly("A", "B");
我想比较 Collection
(产品)(在我的例子中是 LinkedHashMap$LinkedValues
)和 ArrayList
。
测试
assertThat(products, equalTo(Lists.newArrayList(product1, product2, product3)));
不起作用,因为 LinkedValues 没有实现 equals
方法。
所以我将测试更改为:
assertThat(new ArrayList<>(products), equalTo(Lists.newArrayList(product1, product2, product3)));
有没有更好的解决方案,我不必检查集合是否实现了 equals
方法?
假设您使用的数据类型已经有一个 equals 方法,那么就没有必要检查(未)实现的 equals()
函数。否则,您将不得不创建一些东西来比较您正在使用的数据。
附带说明一下,您拥有的两行代码是相同的。你是不是想在第二行放点别的东西?
您可以使用 Arrays.equals
:
assertTrue(Arrays.equals(products.toArray(), new Product[] {product1, product2, product3}));
这会检查数组大小和项目的排序。您的产品 class 应该实现 equals()
才有意义。
请注意,如果需要,您可以使用 ArrayList.toArray()
获取数组。
由于您使用的是 Hamcrest,因此您应该使用名称稍显混乱的方法 Matchers.contains()
。它检查目标集合是否包含与原始集合相同顺序的相同元素。
给出
Map<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("a", "A");
linkedHashMap.put("b", "B");
这将通过:
assertThat(linkedHashMap.values(), contains("A", "B"));
这会失败:
assertThat(linkedHashMap.values(), contains("B", "A"));
请注意,Hamcrest 早已停产,尽管它工作正常并且适用于 99% 的用法,但您会惊讶于 AssertJ 有多好,它提供了多少功能以及断言有多么容易可以。
使用 AssertJ:
assertThat(linkedHashMap.values()).containsExactly("A", "B");