Mockito -Matcher und Hamcrest -Matcher werden in Java zur Erstellung von Testbehauptungen verwendet, dienen jedoch unterschiedlichen Zwecken und weisen unterschiedliche Eigenschaften auf.
Mockito Matcher
Mockito -Matcher werden hauptsächlich zum Einrichten von Erwartungen oder Überprüfungen bei der Arbeit mit Scheinobjekten verwendet. Diese Matcher geben den Typ des zu übertragenden Objekts zurück, wodurch sie direkt als Argumente in Methodenaufrufen von Scheinobjekten verwendet werden können. Zum Beispiel `org.mockito.matchers.any (integer.class)` kehrt ein "Integer" zurück, wodurch es für die Verwendung in Methodenstubbing oder Überprüfung geeignet ist, wie z.
Mockito -Matcher sind so konzipiert, dass sie nahtlos mit Mockitos spöttischem Framework arbeiten, sodass Sie flexible Erwartungen für Methodenaufrufe auf Mock -Objekten definieren können. Sie werden jedoch typischerweise nicht mit "Assertthat" -Anweisungen verwendet, die häufiger mit Hamcrest assoziiert sind.
Hamcrest Matcher
Hamcrest -Matcher hingegen sind so konzipiert, dass sie mit "Assertthat" -Anweisungen zur Annahme von Bedingungen in Tests verwendet werden sollen. Sie geben ein "Matcher-" -Objekt zurück, das ein Prädikat ist, mit dem bewertet werden kann, ob eine Bedingung erfüllt ist. Hamcrest -Matcher sind hoch flexibel und können mit logischen Operatoren wie "Alof`," Anyof` und "Nicht" kombiniert werden, um komplexe Behauptungen zu erstellen [2] [3].
Hamcrest -Matcher werden in Verbindung mit JUNIT- und anderen Test -Frameworks weit verbreitet, um klare und lesbare Testbehauptungen zu schreiben. Sie bieten eine fließende API, die den Testcode selbstdokumentiert und leichter zu verstehen macht. Zum Beispiel vermittelt "Assertthat (" Hallo ", gleich (" Hallo ")) die Absicht der Behauptung eindeutig [7].
Integration zwischen Mockito und Hamcrest
In Fällen, in denen Sie einen Hamcrest -Match in einem Kontext verwenden möchten, für den ein Mockito -Matcher erforderlich ist (z. B. Stubbing oder Überprüfung eines Methodenaufrufs), liefert Mockito die "argthat" -Methode. Mit dieser Methode können Sie einen Hamcrest -Matcher einwickeln und als Mockito -Match verwenden. Zum Beispiel "When (mockfoo.getbarByDouble (argthat (closeto (1,0))))` verwendet einen Hamcrest -Match, um eine Bedingung für einen Doppelwert mit einiger Genauigkeit anzugeben [1] [5].
In Mockito 2 und später wird die Integration in Hamcrest durch die "Mockitohamcrest" -Klasse behandelt, die eine "argthat" -Methode liefert, die speziell für die Zusammenarbeit mit Hamcrest -Matchern ausgelegt ist [5] [10]. Diese Entkopplung hilft bei der Vermeidung von Versionskonflikten zwischen Mockito- und Hamcrest -Bibliotheken.
Zusammenfassend werden Mockito -Matcher hauptsächlich zum Verspotten und Stubbing verwendet, während Hamcrest -Matcher für Behauptungen verwendet werden. Beide können in Tests effektiv zusammengesetzt werden, indem die "argthat" -Methode zur Integration von Hamcrest -Matcher in Mockitos spöttische Framework eingesetzt wird.
Zitate:[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-mather
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://www.vogella.com/tutorials/hamcrest/article.html
[4] https://support.intershop.com/kb/go.php/a/enfdevdoc/pages/1827636063/guide+-+7.10+Migration+Mockito+1+ to+mockito+2
[5] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[6] https://www.baeldung.com/hamcrest-text-matchers
[7] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[8] https://www.scalatest.org/scaladoc/3.0.7/org/scalatest/Matchers.html
[9] https://hamcrest.org/javahamcrest/tutorial
[10] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.argthat