Was wäre ein guter Weg, zwei Instanzen in Java 8 zu vergleichen und herauszufinden, ob sie die gleichen Elemente haben, speziell für Unit-Tests?Wie zwei Streams in Java zu vergleichen 8
Was muss ich jetzt:
@Test
void testSomething() {
Stream<Integer> expected;
Stream<Integer> thingUnderTest;
// (...)
Assert.assertArrayEquals(expected.toArray(), thingUnderTest.toArray());
}
oder alternativ:
Assert.assertEquals(
expected.collect(Collectors.toList()),
thingUnderTest.collect(Collectors.toList()));
Aber das bedeutet, dass ich die Konstruktion zwei Sammlungen und sie zu verwerfen. Angesichts der Größe meiner Teststreams ist das kein Leistungsproblem, aber ich frage mich, ob es einen kanonischen Weg gibt, zwei Streams miteinander zu vergleichen.
Ich bin mir ziemlich sicher, dass es keine Möglichkeit gibt, die Ströme in eine Sammlung oder ein Array ohne Nötigung, wie Sie oben getan haben. – joecoder
Fragen Sie jeweils nach einem 'iterator()' und durchlaufen Sie sie im Lockstep. –
BTW, das kommt im Test-Framework für Streams selbst vor. Wir haben 18 Traversierungsmodi spezifiziert (es gibt mehr, das sind die, die wir getestet haben) und den "gleichen" Strom auf allen Wegen durchlaufen und vergleichen, dass die Ergebnisse identisch sind (Modulo-Umordnungen, die durch die Stream-Bibliothekssemantik erlaubt sind.) Siehe zum Beispiel , http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/test/java/util/stream/bootlib/java/util/stream/StreamTestScenario.java. –