Passende mehrere Eigenschaften in einem Matcher
Muss ich schreiben, Matcher für eine Prüfung mehrere Eigenschaften. Für einzelne Eigenschaft, die ich verwendet habe:
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasProperty;
import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
Matcher<Class> matcherName = Matchers.<Class> hasProperty("propertyName",equalTo(expectedValue));
wie bin ich wohl um zu überprüfen, mehr Eigenschaften in einem Matcher ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überprüfen Sie weitere Eigenschaften, die mit einem matcher durch die Kombination Matcher mit
allOf
:Aber ich denke, dass das, was Sie eigentlich suchen, ist die
samePropertyValuesAs
eine, die überprüft, ob eine bean hat dieselben Eigenschaftswerte wie ein anderes durch überprüfen der Eigenschaften selbst, statt dieequals
Methode:verify(mock).method(argThat(matcherName));
Matcher
dass Sie einer variable zuordnen:Matcher<Class> matcherName = samePropertyValuesAs(expectedBean)
Ruben Antwort mit
allOf
ist der beste Weg, um Matcher kombinieren, aber Sie können auch wählen, um Ihre eigenen schreiben matcher von Grund auf basierend auf BaseMatcher oder TypeSafeMatcher:Obwohl Sie tun, um unbegrenzte macht zu schreiben beliebiger matcher-code, ohne sich auf die Reflexion (die Art und Weise, dass
hasProperty
tut), Sie müssen schreiben Sie Ihre eigenendescribeTo
unddescribeMismatch
(Safely
) - Implementierungen, um die umfangreiche Fehlermeldungen, diehasProperty
definiert und dassallOf
würde Aggregat für Sie.Finden Sie es vielleicht sinnvoll,
allOf
für einfache Fälle, in denen ein paar einfache Matcher, aber Bedenken Sie schreiben Ihre eigenen, wenn die Anpassung einer großen Anzahl von Eigenschaften oder wenn die Implementierung von komplexen bedingten Logik.