2017-07-18 64 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