2017-07-18 4 views
3

Ich versuche, einen Junit-Test zu schreiben, der testen sollte, ob die Reihenfolge der Elemente in zwei LinkedHashSets gleich ist. Der follwoing ist mein vorhandener Code:Junit Test für Auftrag in LinkedHashSet

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

Dieser Test erfolgreich ist, auch wenn ich gebe es vergleicht a, d, c, b gegen a, b, c, d und somit nicht die Reihenfolge der Elemente berücksichtigen. Wie kann ich basierend auf der Bestellung geltend machen?

+0

@Tim C'mon jetzt. _Wenn Sie eine identische Iterationsreihenfolge aktivieren möchten, können Sie beide Iterationen in Listen kopieren und die Listen vergleichen._ Sind Sie verärgert über 'LinkedHashSet' vs' LinkedHashMap'? –

+0

Es sei denn, wir sprechen über ** Ihre ** eigene Implementierung eines LinkedHashSet; oder einige Hausaufgaben, die Sie bekommen haben: Es hat keinen Sinn, eine Implementierung zu testen, die nicht Ihre ist. Mit anderen Worten: Warum müssen Sie die integrierten APIs überprüfen? – GhostCat

Antwort

4

Wenn Sie zwei Listen auf Gleichheit vergleichen, wird die Reihenfolge der Elemente berücksichtigt. Konvertieren Sie das ursprüngliche LinkedHashSet einfach in eine Liste für Assertionszwecke.

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

LinkedHashSet ist ein Set (wenn auch mit garantierter Iterationsreihenfolge) und damit Ordnung in seiner equals() Implementierung ignoriert. Further reading.