Når du bruger Mockito -argument matchere i vid udstrækning, er der flere præstationsovervejelser at huske på. Mens Mockito generelt er effektiv, kan den omfattende brug af argument matchere introducere nogle overhead på grund af den måde, Mockito behandler disse matchere.
1. Matcherbehandling overhead **
- Argument Matcher Evaluation: Når du bruger argument matchere som `ækv. ()`, `Enhver ()` eller `antring ()`, er Mockito nødt til at evaluere disse matchere ved runtime. Denne evalueringsproces kan introducere en let omkostning sammenlignet med at passere nøjagtige værdier direkte. Imidlertid er denne overhead typisk ubetydelig, medmindre du har at gøre med et meget stort antal påkaldelser eller komplekse matchere.2. Matcher -kombinationsregler **
- Alle argumenter skal bruge matchere: Hvis du bruger en argument matcher til et argument, skal alle argumenter bruge matchere. Denne regel kan føre til mere ordretskode og potentielt mere overhead, hvis du bruger matchere til alle argumenter, når kun en har brug for en bestemt betingelse. For eksempel, hvis en metode har tre parametre, og du vil bruge `enhver ()` til en af dem, skal du også bruge matchere til de to andre, selvom du kunne have brugt nøjagtige værdier.3. brugerdefinerede matchere **
- Kompleks logik: Mens Mockito leverer en bred vifte af indbyggede matchere, skal du muligvis oprette tilpassede matchere til specifik logik. Brugerdefinerede matchere kan være mere beregningsmæssigt dyre, hvis de involverer kompleks logik eller operationer. Dette skyldes, at de kræver implementering af 'ArgumentMatcher' -grænsefladen og definition af en 'matches ()' metode, der kan udføre vilkårlige kontroller.4. Verifikationsomkostninger **
- Bekræftelse med matchere: Når man verificerer interaktioner med mock -objekter ved hjælp af `verificering ()`, bruger Mockito også matchere til at kontrollere, om de korrekte argumenter blev vedtaget. I lighed med stubbing kan verifikation med matchere introducere nogle overhead, især hvis du verificerer flere opkald med komplekse matchere.5. Bedste praksis til ydeevne **
- Brug specificitet med omhu: Brug matchere med det rigtige niveau af specificitet. For eksempel er `anyint ()` mindre specifik og hurtigere end `ækv. (4)`, men at bruge `ækv. (4)` når du har brug for at verificere, at en bestemt værdi er mere præcis og ikke påvirker ydelsen væsentligt.- Undgå unødvendig kompleksitet: Undgå at bruge brugerdefinerede matchere, medmindre det er nødvendigt. Hvis en test kræver kompleks logik for at matche argumenter, skal du overveje at forenkle testen eller bruge eksisterende matchere kreativt.
- Profil dine tests: Hvis du bemærker ydelsesproblemer i dine test, skal du profilere dem til at identificere flaskehalse. Det er sjældent, at Mockito -matchere er den primære årsag til betydelige præstationsproblemer, men det er altid godt at verificere.
Sammenfattende, mens Mockito-argument matchere introducerer nogle overhead, er dette generelt ikke et væsentligt problem, medmindre du har at gøre med ekstremt komplekse eller præstationskritiske tests. Fordelene ved at bruge matchere såsom fleksibilitet og klarhed i testkoden opvejer normalt de mindre ydelsesomkostninger.
Citater:)
[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-veryday-mockito
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lambdatest.com/automation-test-advisor/selenium/classes/org.mockito.additionmatchers
[8] https://stackoverflow.com/questions/73046134/when-should-i-ifean-argument-matcher-r-passing-argument-directly-when-mockito-uni