El uso de MockitohamCrest sobre los Matchers tradicionales de Hamcrest ofrece varias ventajas, particularmente cuando se trabaja con Mockito para burlarse en las pruebas unitarias. Estos son los beneficios clave:
1. Integración con Mockito: Mockitohamcrest le permite integrar a la perfección Hamcrest Matchers con el marco de burla de Mockito. Esta integración es crucial para configurar trozos o verificar llamadas de métodos con una coincidencia de argumentos complejos, que no está directamente compatible con los casas de Hamcrest tradicionales solo. Por ejemplo, puede usar `mockitohamcrest.argThat` para convertir una casadora Hamcrest en una combate Mockito, lo que le permite usar el rico conjunto de matchers de Hamcrest en contextos de simulacros [1] [10] [12].
2. Evitar las incompatibilidades de la versión: Mockito fue desacoplado de Hamcrest en la versión 2.1.0 para evitar las incompatibilidades de la versión que habían causado problemas para los usuarios en el pasado. Mockitohamcrest proporciona una forma de usar Hamcrest Matchers sin estar estrechamente acoplados a una versión específica de Hamcrest, reduciendo así los posibles conflictos [1] [10].
3. Flexibilidad en la coincidencia de argumentos: Mockitohamcrest le permite usar los maticadores flexibles y expresivos de Hamcrest para definir escenarios complejos de coincidencia de argumentos. Esto es particularmente útil cuando debe verificar que se llamara un método con argumentos que coincidan con ciertas condiciones, como cadenas que contienen subcadenas o números específicos dentro de un cierto rango [4] [12].
4. Leyabilidad mejorada y código de autodocumento: al usar Hamcrest Matchers a través de Mockitohamcrest, sus pruebas pueden permanecer autodocumentantes y fáciles de leer. Los Matchers expresan claramente la intención de la prueba, lo que facilita a los desarrolladores comprender qué se está probando sin necesidad de comentarios adicionales [3] [9].
5. Mejores mensajes de error: cuando las afirmaciones fallan, Hamcrest proporciona mensajes de error detallados y significativos, lo que puede ayudar significativamente en la depuración. Esto es especialmente beneficioso cuando se usa Mockitohamcrest, ya que ayuda a identificar por qué una verificación simulada falló, lo que hace que sea más fácil diagnosticar problemas [3] [9].
6. Personalización y extensibilidad: la API de Matcher de Hamcrest le permite crear combates personalizados adaptados a sus necesidades de prueba específicas. Cuando se combina con Mockitohamcrest, esta extensibilidad le permite escribir pruebas más específicas y expresivas que coincidan con precisión en la lógica de su aplicación [6] [9].
En resumen, Mockitohamcrest ofrece una poderosa combinación de las capacidades de burla de Mockito con los combaters flexibles y expresivos de Hamcrest, mejorando la legibilidad de las pruebas, la flexibilidad y la mantenibilidad.
Citas:[1] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[2] https://stackoverflow.com/questions/20441594/mockito-and-hamcrest-how-to-verify-invocation-of-collection-argument
[3] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.mockitohamcr
[5] https://www.javadoc.io/doc/org.mockito/mockito-core/2.2.9/org/mockito/argumentmatcher.html
[6] https://www.javacodegeeks.com/2015/11/custom-hamcrest-matchers.html
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.hamcrest.mockitohamcrest
[8] https://site.mockito.org/javadoc/current/index.html?org%2fmockito%2fargumentMatcher.html
[9] https://www.vogella.com/tutorials/hamcrest/article.html
[10] https://weblab.tudelft.nl/docs/mockito/3.10/org/mockito/hamcrest/mockitohamcrest.html
[11] https://truth.dev/comparison.html
[12] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher