Når du bruker Mockito -argumentets matchere mye, er det flere ytelseshensyn du må huske på. Mens Mockito generelt er effektiv, kan den omfattende bruken av argumentasjonsmatchere introdusere noe overhead på grunn av måten Mockito behandler disse matcherne.
1. Matcher prosessering overhead **
- Argument Matcher Evaluation: Når du bruker argumentkampere som `Eq ()`, `hvilken som helst ()`, eller `anystring ()`, må Mockito evaluere disse matcherne på kjøretid. Denne evalueringsprosessen kan innføre et lite overhead sammenlignet med å passere eksakte verdier direkte. Imidlertid er denne overhead typisk ubetydelig med mindre du har å gjøre med et veldig stort antall påkallinger eller komplekse matchere.2. Matcher kombinasjonsregler **
- Alle argumenter må bruke matchere: Hvis du bruker en argument matcher for ett argument, må alle argumenter bruke matchere. Denne regelen kan føre til mer ordentlig kode og potensielt mer overhead hvis du bruker matchere for alle argumenter når bare en trenger en spesifikk tilstand. For eksempel, hvis en metode har tre parametere og du vil bruke `noen ()` for en av dem, må du bruke matchere for de to andre også, selv om du kunne ha brukt eksakte verdier.3. Tilpassede matchere **
- Kompleks logikk: Mens Mockito gir et bredt spekter av innebygde matchere, kan det hende du må lage tilpassede matchere for spesifikk logikk. Tilpassede matchere kan være mer beregningsdyktige hvis de involverer kompleks logikk eller operasjoner. Dette fordi de krever implementering av `ArgumentMatcher` -grensesnittet og definerer en` matches () ` -metoden som kan utføre vilkårlige kontroller.4. Verifisering overhead **
- Verifisering med matchere: Når du verifiserer interaksjoner med spotte objekter ved å bruke `Verify ()`, bruker Mockito også matchere for å sjekke om de riktige argumentene ble bestått. I likhet med stubbing kan bekreftelse med matchere introdusere noe overhead, spesielt hvis du bekrefter flere samtaler med komplekse matchere.5. Beste praksis for ytelse **
- Bruk spesifisitet med omhu: Bruk matchere med riktig spesifisitetsnivå. For eksempel er `anyint ()` mindre spesifikk og raskere enn `Eq (4)`, men å bruke `Eq (4)` når du trenger å bekrefte at en spesifikk verdi er mer presis og påvirker ikke ytelsen betydelig.- Unngå unødvendig kompleksitet: Unngå å bruke tilpassede matchere med mindre det er nødvendig. Hvis en test krever kompleks logikk for å matche argumenter, kan du vurdere å forenkle testen eller bruke eksisterende matchere kreativt.
- Profil testene dine: Hvis du legger merke til ytelsesproblemer i testene dine, profil dem til å identifisere flaskehalser. Det er sjelden at Mockito -matchere er den viktigste årsaken til betydelige ytelsesproblemer, men det er alltid godt å bekrefte.
Oppsummert, mens Mockito-argumentasjonsmatchere introduserer noe overhead, er dette generelt ikke en vesentlig bekymring med mindre du har å gjøre med ekstremt komplekse eller ytelseskritiske tester. Fordelene ved å bruke matchere som fleksibilitet og klarhet i testkode, oppveier vanligvis de mindre ytelseskostnadene.
Sitasjoner:[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-striv-directly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-ny-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-testing-advisor/selenium/classes/org.mockito.additionalmatchers
[8] https://stackoverflow.com/questions/73046134/when-should-i-use-argument-matcher-or-passing-argument-directly-when-mockito-uni