Seit einigen Tagen verwende ich jetzt Junit's Matchers Feature. Alles funktioniert OK, aber ich suche nach einem Matcher, der einen Komparator zum Vergleichen verwendet und der sich nicht auf die Objekte als Methoden verlässt.
Ich möchte
ersetzen %Vor%mit etwas wie (Pseudocode)
%Vor%Wissen Sie, ob es eine einfache Out-of-the-Box-Lösung gibt? Ich habe bei Google keinen gefunden und möchte keinen schreiben.
Dies wird jetzt in Hamcrest 2.0.0.0 + unterstützt.
Sie können die Organisation verwenden .hamcrest.comparator.ComparatorMatcherBuilder Klasse, um dies zu erreichen, zum Beispiel:
%Vor% Ich bin mir in Hamcrest nicht bewusst, das zu tun. Möglicherweise müssen Sie einen benutzerdefinierten Matcher schreiben. Eine Sache zu beachten: Wenn equals
nicht true
zurückgibt, sind die Objekte gleich? Wenn Sie nach bestimmten Eigenschaften testen, ist Ihr benutzerdefinierter Matcher möglicherweise klarer als FeatureMatcher
( Gibt es eine einfache Möglichkeit, eine Übereinstimmung zu finden? ein Feld mit Hamcrest? ). Zum Beispiel, wenn der Test für ein erwartetes Label ist:
kann klarer sein als:
%Vor%Das Schreiben von benutzerdefinierten Zuordnungen erfordert nicht viel Code ( Schreiben von benutzerdefinierten Zuordnungen ) und Es gibt keinen Grund, es zu vermeiden, wenn es Code lesbarer macht.
Eine weitere Option ist die AspectJ Framework-Vergleichsstrategie für Objekt und iterables.
%Vor%Es hat auch Vergleiche nach Feld , z isEqualToComparingOnlyGivenFields und isEqualToIgnoringGivenFields Komparatoren.
%Vor%In den meisten Fällen können Sie die Assertion ohne benutzerdefinierte Vergleichsstrategie bearbeiten.