Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Cuáles son las limitaciones del uso de Mockito Argument Matchers?


¿Cuáles son las limitaciones del uso de Mockito Argument Matchers?


Mockito Arguments Matchers son herramientas poderosas utilizadas en las pruebas unitarias para especificar de manera flexible cuando se configuran simulacros. Sin embargo, vienen con varias limitaciones:

1. Contexto de uso: los combates de argumentos solo se pueden usar dentro del contexto de los métodos de rastro o verificación. No se pueden usar al llamar a los métodos en el objeto bajo la prueba. Por ejemplo, no puede usar `AnyString ()` al llamar a un método en un objeto real; En su lugar, debe usar un valor concreto [1] [5].

2. Consistencia en todos los argumentos: cuando se usa un argumento Matcher para un argumento, todos los demás argumentos también deben usar Matchers. No puede mezclar combates con valores concretos para diferentes argumentos en la misma llamada de método. Esta es una fuente común de 'InvaliduseOfMatchersException` [7] [8].

3. Limitaciones de burla: Mockito no puede burlarse de ciertos métodos como `Equals ()`, `hashcode ()` o métodos finales. Si bien los combinadores de argumentos pueden usarse con métodos que pueden burlarse, no extienden la capacidad de burlarse de estos métodos restringidos [3].

4. Tipos de combate de argumentos: Mockito proporciona una variedad de combaters de argumentos incorporados (por ejemplo, `AnyInt ()`, `AnyString ()`, `isNull ()`), pero debe elegir el tipo correcto para el argumento. Por ejemplo, usar `Any ()` con un tipo primitivo podría no funcionar como se esperaba; En su lugar, use un combate más específico como `AnyBoolean ()` para parámetros booleanos [7].

5. Matchers de argumentos personalizados: mientras Mockito le permite crear combaters personalizados utilizando el método `argthat ()`, implementar la interfaz `ArgumentMatcher` requiere una consideración cuidadosa para garantizar que el matcher se comporte como se esperaba en diferentes escenarios [2] [4].

6. Integración con otras bibliotecas: cuando se usa Mockito con otras bibliotecas como Hamcrest, asegúrese de que la integración se maneje correctamente. Por ejemplo, Sonarqube podría marcar ciertos usos de `argthat ()` con Hamcrest Matchers como incorrectos, incluso si son válidos [4].

En resumen, mientras que los combates de argumentos de Mockito son versátiles, su uso está restringido a contextos específicos y requiere consistencia entre los argumentos de método. Además, no superan las limitaciones fundamentales de Mockito con respecto a ciertos métodos o clases.

Citas:
[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-rule-s6073-mockito-argument-matchers-in-case-of-usage-mockitohamcrest-adapter/38429
[5] https://groups.google.com/g/mockito/c/zi6pcqudtco
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.argumentmatchers.isnull
[7] https://stackoverflow.com/questions/16458136/mockito-invalid-use-of-argument-matchers
[8] https://www.baeldung.com/mockito-argument-matchers