2017-07-18 35 views
3

我正在尝试编写一个Junit测试,它应该测试两个LinkedHashSets中元素的顺序是否相同。该follwoing是我现有的代码:在LinkedHashSet中订购的Junit测试

Assert.assertEquals(
      Sets.newLinkedHashSet(Arrays.asList("a","d","c","b")), 
      conf.getSetInfo() 
    ); 

这个测试是成功的,即使我给它一个比较,d,C,B对A,B,c,d和因此不考虑元素的顺序。 如何根据订单进行断言?

+0

@Tim现在来吧。 _如果你想声明相同的迭代顺序,你可以将两个迭代复制到列表中,并比较列表。你是否在研究'LinkedHashSet'和'LinkedHashMap'? –

+0

除非我们正在谈论**你自己的LinkedHashSet实现;或者给你一些作业:在测试不是你自己的实现方面没有意义。换句话说:为什么你认为你必须验证内置的API? – GhostCat

回答

4

当你比较两个列表为平等,元素的排序被考虑在内。因此,只需将原始LinkedHashSet转换为用于声明目的的List。

List<String> expected = Arrays.asList("a", "d", "c", "b");   
Assert.assertEquals(
    expected, 
    new ArrayList<>(conf.getSetInfo()) 
); 

LinkedHashSet是一个集(尽管一个有保障的迭代顺序),因此排序在其equals()执行忽略。 Further reading