Al usar Mockito Argument Matchers ampliamente, hay varias consideraciones de rendimiento a tener en cuenta. Si bien Mockito es generalmente eficiente, el uso extensivo de los combinadores de argumentos puede introducir algo de sobrecarga debido a la forma en que Mockito procesa estos combates.
1. Overhead de procesamiento de matcher **
- Evaluación de argumentos de combate: cuando usa combaters de argumentos como `eq ()`, `any ()` o `anystring ()`, Mockito necesita evaluar estos maticeros en tiempo de ejecución. Este proceso de evaluación puede introducir una ligera sobrecarga en comparación con los valores exactos directamente. Sin embargo, esta sobrecarga suele ser insignificante a menos que esté tratando con una gran cantidad de invocaciones o combaters complejos.2. Reglas de combinación de matcher **
- Todos los argumentos deben usar Matchers: si usa un argumento Matcher para un argumento, todos los argumentos deben usar Matchers. Esta regla puede conducir a un código más detallado y potencialmente más gastos generales si está utilizando a Matchers para todos los argumentos cuando solo uno necesita una condición específica. Por ejemplo, si un método tiene tres parámetros y desea usar `Any ()` para uno de ellos, también debe usar a Matchers para los otros dos, incluso si pudiera haber usado valores exactos.3. Matchers personalizados **
- Lógica compleja: si bien Mockito proporciona una amplia gama de combaters incorporados, es posible que deba crear combates personalizados para una lógica específica. Los combates personalizados pueden ser más costosos computacionalmente si involucran lógica u operaciones complejas. Esto se debe a que requieren implementar la interfaz `ArgumentMatcher` y definir un método` coincidentes () `que puede realizar verificaciones arbitrarias.4. Verificación Sobre **
- Verificación con Matchers: al verificar las interacciones con objetos simulados usando `Verify ()`, Mockito también usa Matchers para verificar si se aprobaron los argumentos correctos. Similar a los trozos, la verificación con Matchers puede introducir algo de sobrecarga, especialmente si está verificando múltiples llamadas con Matchers complejos.5. Las mejores prácticas para el rendimiento **
- Use la especificidad sabiamente: use a Matchers con el nivel correcto de especificidad. Por ejemplo, `AnyInt ()` es menos específico y más rápido que `EQ (4)`, pero usar `eq (4)` cuando necesita verificar un valor específico es más preciso y no tiene un impacto significativo en el rendimiento.- Evite la complejidad innecesaria: evite el uso de combates personalizados a menos que sea necesario. Si una prueba requiere una lógica compleja para que coincidan con los argumentos, considere simplificar la prueba o usar los matchers existentes creativamente.
- Perfil en sus pruebas: si nota los problemas de rendimiento en sus pruebas, perféntelos para identificar cuellos de botella. Es raro que Mockito Matchers sea la causa principal de problemas de rendimiento significativos, pero siempre es bueno verificar.
En resumen, mientras que los matices de argumentos de Mockito introducen algunas sobrecargas, esto generalmente no es una preocupación significativa a menos que esté tratando con pruebas extremadamente complejas o críticas de rendimiento. Los beneficios del uso de Matchers, como flexibilidad y claridad en el código de prueba, generalmente superan los costos de rendimiento menores.
Citas:[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-string-directly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[4] https://www.softwaretestinghelp.com/mockito-matchers/
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.addicionalmatchers
[8] https://stackoverflow.com/questions/73046134/when-should-i-use-argument-matcher-or-passing-argument-directly-when-mockito-uni