2016-05-23 4 views
2

Der Eingang:Wie verwenden Sie Matcher für die Sammlung mit Hamcrest?

  1. Sammlung mit MyElement ohne gleich Methode.
  2. Eine org.hamcrest.TypeSafeMatcher-Implementierung, bei der das Element durch ein Feld abgeglichen wird.

Ziel ist folgende Aussage übersetzbar machen:

Collection<MyElement> elements = ... 
Collection<TypeSafeMatchert> matchers = ... 
assertThat(elements, Matchers.contains(matchers); //<error here 

Was haben Sie hier benutzen? Es will mich zu Matcher<? super java.util.List<MyElement>> und erzählte, dass actully ich Matcher<java.lang.Iterable<? super java.util.List<MyElement>>> passierte. Wie kann ich hier eine Matcher Collection übergeben?

Es gibt eine question über den Vergleich von Sammlungen mit Hamcrest, aber es gibt kein Beispiel mit passender Matchers Sammlung, keine Elemente.

+0

Mögliche Duplikate von [Hamcrest vergleichen Sammlungen] (http://stackoverflow.com/questions/21624592/hamcrest-compare-collections) –

+0

sehr nahe, aber es gibt keine Antwort mit Verwendung Matcher anstelle von Elementen. :( – Cherry

+0

versuchen, Typen zu spezifizieren; wie dort: http://stackoverflow.com/questions/31103222/hamcrest-matchers-contains-with-list-of-matchers?rq=1 –

Antwort

0

Verwenden Sie die Liste anstelle der Auflistung für die Matcher, oder konvertieren Sie sie in Array.

hamcrest hat folgende contains Methoden:

public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(org.hamcrest.Matcher<? super E>... itemMatchers) 

public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(E... items) 

public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(org.hamcrest.Matcher<? super E> itemMatcher) 

public static <E> org.hamcrest.Matcher<java.lang.Iterable<? extends E>> contains(java.util.List<org.hamcrest.Matcher<? super E>> itemMatchers) 

Wie Sie es Griffe Matchers nur im Falle eines List oder varags sehen können (aber wenn man nur ein Element passieren, dann müssen Sie es auf Array konvertieren).

0

Statt eine Collection von TypeSafeMatchers zu definieren, müssen Sie eine definieren:

List<Matcher<? super MyElement>> matchers = ...; 

Auf diese Weise Hamcrest wird wissen, was Sie wollen.

Verwandte Themen