Mockito Matchers y Hamcrest Matchers se usan en Java para crear afirmaciones de prueba, pero tienen diferentes propósitos y tienen características distintas.
Mockito Matchers
Mockito Matchers se utilizan principalmente para establecer expectativas o verificaciones cuando se trabajan con objetos simulados. Estos Matchers devuelven el tipo de objeto que coincide, lo que les permite usarse directamente como argumentos en las llamadas de método en los objetos simulados. Por ejemplo, `org.mockito.matchers.ya (integer.class)` devuelve un `entero`, haciéndolo adecuado para su uso en el mechón o verificación de métodos, como` When (Mockfoo.getBarbyIndex (any (integer.class)) `[1].
Mockito Matchers está diseñado para funcionar a la perfección con el marco de burla de Mockito, lo que le permite definir expectativas flexibles para las llamadas de método en los objetos simulados. Sin embargo, típicamente no se usan con declaraciones `afirmar que se asocian más comúnmente con Hamcrest.
Hamcrest Matchers
Hamcrest Matchers, por otro lado, están diseñados para usarse con declaraciones 'afirmar que se afirman para afirmar las condiciones en las pruebas. Devuelven un objeto 'Matcher`, que es un predicado que se puede usar para evaluar si se cumple una condición. Hamcrest Matchers son altamente flexibles y se pueden combinar utilizando operadores lógicos como 'Allof`,' AnyOf` y 'Not' para crear afirmaciones complejas [2] [3].
Hamcrest Matchers se usa ampliamente junto con JUnit y otros marcos de prueba para escribir afirmaciones de prueba claras y legibles. Proporcionan una API con fluidez que hace que el código de prueba sea más autodocumental y más fácil de entender. Por ejemplo, `afirmar (" hola ", igual a (" hola "))` comunica claramente la intención de la afirmación [7].
Integración entre Mockito y Hamcrest
En los casos en que desea utilizar una Matcher Hamcrest en un contexto que requiera una combinación de Mockito (por ejemplo, Stubbing o verificación de una llamada de método), Mockito proporciona el método `Argthat`. Este método le permite envolver una Matcher Hamcrest y usarlo como un Mockito Matcher. Por ejemplo, `When (Mockfoo.getBarbyDouble (argthat (closeto (1.0, 0.001))))` usa un casador Hamcrest para especificar una condición para un valor doble con cierta precisión [1] [5].
En Mockito 2 y posterior, la integración con Hamcrest se maneja a través de la clase `Mockitohamcrest`, que proporciona un método` Argthat` diseñado específicamente para funcionar con Hamcrest Matchers [5] [10]. Este desacoplamiento ayuda a evitar conflictos de versión entre las bibliotecas Mockito y Hamcrest.
En resumen, Mockito Matchers se usa principalmente para burlarse y tirar, mientras que los Matchers de Hamcrest se usan para afirmaciones. Ambos pueden usarse juntos de manera efectiva en las pruebas aprovechando el método 'Arghat' para integrar a Hamcrest Matchers en el marco de burla de Mockito.
Citas:[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[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+++
[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