参见英文答案 > LinkedHashSet .equals() vs LinkedList .equals() with same elements but different order 2个
> JUnit order of LinkedHashMap Java 8 1个
我正在尝试编写一个Junit测试,该测试应测试两个LinkedHashSets中的元素顺序是否相同.以下是我现有的代码:
Assert.assertEquals(
Sets.newLinkedHashSet(Arrays.asList("a","d","c","b")),
conf.getSetInfo()
);
即使我给它比较a,d,c,b与a,b,c,d并且因此不考虑元素的排序,这个测试也是成功的.
我怎样才能根据订单进行断言?
解决方法:
比较两个列表是否相等时,会考虑元素的顺序.因此,只需将原始的LinkedHashSet转换为List以进行断言.
List<String> expected = Arrays.asList("a", "d", "c", "b");
Assert.assertEquals(
expected,
new ArrayList<>(conf.getSetInfo())
);
LinkedHashSet是一个Set(尽管有一个保证迭代顺序),因此在equals()实现中忽略了排序. Further reading.