Lorsque vous utilisez largement les Mockito Arguments Matchers, il existe plusieurs considérations de performances à garder à l'esprit. Bien que Mockito soit généralement efficace, l'utilisation approfondie des matchs d'arguments peut introduire certaines frais généraux en raison de la façon dont Mockito traite ces matchs.
1. Traitement du match pour les frais généraux **
- Évaluation des matchs d'argument: lorsque vous utilisez des matchs d'arguments comme `EQ () ',` any ()', ou `anyString () ', Mockito doit évaluer ces matchs au moment de l'exécution. Ce processus d'évaluation peut introduire une légère surcharge par rapport à la transmission directement des valeurs exactes. Cependant, ces frais généraux sont généralement négligeables, sauf si vous avez affaire à un très grand nombre d'invocations ou de correspondances complexes.2. Règles de combinaison du matchur **
- Tous les arguments doivent utiliser des matchs: si vous utilisez un match de l'argument pour un argument, tous les arguments doivent utiliser des correspondances. Cette règle peut conduire à un code plus verbeux et potentiellement plus de frais généraux si vous utilisez des correspondances pour tous les arguments alors qu'une seule a besoin d'une condition spécifique. Par exemple, si une méthode a trois paramètres et que vous souhaitez utiliser `any ()` pour l'un d'eux, vous devez également utiliser des matchs pour les deux autres, même si vous auriez pu utiliser des valeurs exactes.3. Matchants personnalisés **
- Logique complexe: Bien que Mockito fournit une large gamme de correspondants intégrés, vous devrez peut-être créer des correspondants personnalisés pour une logique spécifique. Les matchs personnalisés peuvent être plus coûteux en calcul s'ils impliquent une logique ou des opérations complexes. En effet, ils nécessitent l'implémentation de l'interface `argumentmatcher` et la définition d'une méthode` `matches () 'qui peut effectuer des vérifications arbitraires.4. Vérification Overhead **
- Vérification avec les matchs: Lors de la vérification des interactions avec des objets simulés à l'aide de `Verify () ', Mockito utilise également des matchs pour vérifier si les arguments corrects ont été passés. Semblable au coup, la vérification avec des matchs peut introduire des frais généraux, surtout si vous vérifiez plusieurs appels avec des matchs complexes.5. meilleures pratiques de performance **
- Utilisez la spécificité judicieusement: utilisez des matchs avec le bon niveau de spécificité. Par exemple, `anyint ()» est moins spécifique et plus rapide que «Eq (4)», mais l'utilisation de «Eq (4)» lorsque vous devez vérifier une valeur spécifique est plus précise et n'a pas d'impact significatif sur les performances.- Évitez la complexité inutile: évitez d'utiliser des matchs personnalisés, sauf si nécessaire. Si un test nécessite une logique complexe pour faire correspondre les arguments, envisagez de simplifier le test ou d'utiliser des correspondances existantes de manière créative.
- Profitez vos tests: si vous remarquez des problèmes de performances dans vos tests, profilez-les pour identifier les goulots d'étranglement. Il est rare que Mockito Matchers soit la principale cause de problèmes de performances significatifs, mais il est toujours bon de vérifier.
En résumé, bien que Mockito Arguments Matchers introduise des frais généraux, ce n'est généralement pas une préoccupation importante à moins que vous ne traitiez des tests extrêmement complexes ou critiques. Les avantages de l'utilisation de Matchers tels que la flexibilité et la clarté du code de test l'emportent généralement sur les coûts de performance mineurs.
Citations:[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-tetsting-advisor/selenium/classes/org.mockito.additionalmatters
[8] https://stackoverflow.com/questions/73046134/When-should-i-use-argument-matcher-or-passing-argument-directly-when-mackito-Uni