Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Gibt es Alternativen zu Hamcrest, die mit Mockito besser funktionieren


Gibt es Alternativen zu Hamcrest, die mit Mockito besser funktionieren


Bei der Arbeit mit Mockito wird Hamcrest häufig für seine ausdrucksstarken Matcher verwendet, was die Lesbarkeit von Tests verbessert. Es gibt jedoch Alternativen, die gut mit Mockito zusammenarbeiten können, jeweils ihre eigenen Stärken und Schwächen.

assertj

Assertj ist eine beliebte Alternative zu Hamcrest für das Schreiben von Behauptungen in Unit -Tests. Es bietet eine fließende API, die viele Entwickler einfacher zu bedienen und ausdrucksvoller als Hamcrest finden. Die SERTJs Syntax wird häufig für seine Lesbarkeit und die Fähigkeit bevorzugt, einfach benutzerdefinierte Behauptungen zu erstellen. Während Assertj nicht direkt in Mockito integriert, wie Hamcrest, kann es neben Mockito für Behauptungen verwendet werden, wodurch Tests lesbarer und wartbarer werden. Assertj konzentriert sich jedoch in erster Linie eher auf Behauptungen als auf die breiteren Übereinstimmungsfähigkeiten von Hamcrest [1] [3].

Wahrheit

Die Wahrheit ist eine weitere Assertion -Bibliothek, die von Google entwickelt wurde. Es bietet eine fließende API ähnlich wie AssertJ, konzentriert sich jedoch mehr auf die Bereitstellung einer besseren Unterstützung bei der automatischen Vervollständigung in IDEs, was für die Entdeckung der verfügbaren Behauptungen von Vorteil sein kann. Die Wahrheit wird bei Mockito nicht so häufig verwendet wie Hamcrest, kann jedoch für Behauptungen in Tests verwendet werden. Wie Assertj konzentriert sich die Wahrheit eher auf Behauptungen als auf die allgemeine Übereinstimmung, die Hamcrest bietet [3].

Mockitos eingebaute Matcher von Mockito

Mockito selbst bietet Matcher, die zum Stubbing und zur Überprüfung von Interaktionen mit Scheinobjekten verwendet werden können. Diese Matcher geben den Typ zurück, den sie übereinstimmen (z. B. "Any (Integer.class)" zurückgegeben einen "Integer"), der sich von Hamcrest -Matchern unterscheidet, die einen "Matcher" zurückgeben. Um Hamcrest-Matcher mit Mockito zu verwenden, können Sie "Argthat" oder "Mockitohamcrest.Argthat" verwenden, um einen Hamcrest-Match in eine mockito-kompatible Form umzuwandeln [7].

benutzerdefinierte Implementierungen

Für Szenarien, in denen Sie es vorziehen, keine externen Bibliotheken zu verwenden, können Sie Ihre eigenen Matcher oder Behauptungen implementieren. Dieser Ansatz ermöglicht die vollständige Kontrolle über das Verhalten und die Syntax, erfordert jedoch mehr Aufwand und Wartung. Es wird in der Regel nicht empfohlen, es sei denn, Sie haben sehr spezifische Anforderungen, die nicht von vorhandenen Bibliotheken erfüllt werden.

Abschluss

Während Hamcrest aufgrund seiner Flexibilität und Ausdruckskraft bei Mockito weit verbreitet ist, können Alternativen wie Assertj und Wahrheit den Bestandteil Ihrer Tests verbessern. Wenn Sie nach etwas suchen, das sich gut in Mockito für passende Zwecke integriert, bleibt Hamcrest eine starke Wahl, aber Sie können seine Matcher neben anderen Assertion -Bibliotheken für ein umfassenderes Testerlebnis verwenden. Letztendlich hängt die Wahl von Ihren spezifischen Anforderungen und Vorlieben in Bezug auf die Lesbarkeit, die Benutzerfreundlichkeit und die Art der Behauptungen oder Übereinstimmungen ab, die Sie in Ihren Tests durchführen müssen.

Zitate:
[1] https://www.reddit.com/r/java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_why/
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/comparison.html
[4] https://www.reddit.com/r/javahelp/comportment/oqz8cn/unit_testing_with_mockito_framework_why_do_we/
[5] https://www.infoworld.com/article/2257253/junit-5-tutorial-part-1-unit-testing-with-junit-5-mockito-and-hamcrest.html
[6] https://softwareEngineering.stackexchange.com/questions/447953/alternatives-dous-using-mock-libraries-such-as-mockito-init-testing
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-mather
[8] https://stackoverflow.com/questions/12606196/what-is-alternative-to-using-deprecated-hamcrest-method-is