我尝试使用Assert来检查两个集合是否相同。它们应该是相同的,即使它们的元素顺序不同。
下面是我检查等式的方法:
public static <T> void assertCollectionsAreEquals (Collection<T> expected, Collection<T> actual, String message) {
Assertions.assertEquals(expected, actual, message);
}
示例集合:
Collection <Integer> one = new ArrayList<Integer>();
Collection <Integer> two = new ArrayList<Integer>();
Collection <Integer> three = new ArrayList<Integer>();
one.add(1);
one.add(2);
two.add(1);
two.add(2);
three.add(2);
three.add(1);
我的收藏品是这样的:
One:[1, 2]
Two:[1, 2]
Three:[2, 1]
试验:
assertCollectionsAreEquals(one, two, "Not Equals");
assertCollectionsAreEquals(one, three, "Not Equals");
输出:
Exception in thread "main" org.opentest4j.AssertionFailedError: Not Equals ==> expected: <[1, 2]> but was: <[2, 1]>
如何使所有测试集合的测试都成功?
3条答案
按热度按时间6ovsh4lw1#
在JUnit 5中没有现成的Assert方法来实现这一点,您可以使用Hamcrest来代替:
4si2a6ki2#
5n0oy7gb3#
为了检查两个集合的相等性,应该比较两个集合的大小,接下来可以通过从集合
c1
的副本中移除集合c2
中的元素来计算差,并且如果集合c2
为空,则集合相等:这种方法允许比较不同类型的集合(例如
List
到Set
)则可在测试中使用常见的
assertTrue
/assertFalse
:Collection::removeAll
在集合中包含相同元素但频率不同的情况下可能会产生不正确的结果,例如List.of (1, 2, 2, 2)
和List.of (1, 2, 1, 2)
,因此将其替换为迭代remove
。