Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Finns det några prestationshänsyn när man använder Mockito -argumentmatchare i stor utsträckning


Finns det några prestationshänsyn när man använder Mockito -argumentmatchare i stor utsträckning


När man använder Mockito -argumentmatchare i stor utsträckning finns det flera prestationsöverväganden att tänka på. Medan Mockito i allmänhet är effektiv, kan den omfattande användningen av argumentmatchare introducera en del overhead på grund av hur Mockito bearbetar dessa matchare.

1. Matcherbehandling över huvudet **

- Utvärdering av argumentmatcher: När du använder argumentmatchare som `Eq ()`, `någon ()` eller `AnyString ()`, måste Mockito utvärdera dessa matchare vid körning. Denna utvärderingsprocess kan införa en liten omkostnad jämfört med att passera exakta värden direkt. Emellertid är denna omkostnad vanligtvis försumbar om du inte har att göra med ett mycket stort antal invokationer eller komplexa matchare.

2. Matcherkombinationsregler **

- Alla argument måste använda matchare: Om du använder en argumentmatcher för ett argument måste alla argument använda matchare. Denna regel kan leda till mer verboskod och potentiellt mer overhead om du använder matchare för alla argument när bara en behöver ett specifikt villkor. Till exempel, om en metod har tre parametrar och du vill använda `någon ()` för en av dem, måste du också använda matchare för de andra två, även om du kunde ha använt exakta värden.

3. Anpassade matchare **

- Komplex logik: Medan Mockito tillhandahåller ett brett utbud av inbyggda matchare, kan du behöva skapa anpassade matchare för specifik logik. Anpassade matchare kan vara mer beräkningsmässigt dyra om de involverar komplex logik eller operationer. Detta beror på att de kräver implementering av metoden "ArgumentMatcher" och definierar en "matcher ()" -metod som kan utföra godtyckliga kontroller.

4. Verifiering overhead **

- Verifiering med matchare: Vid verifiering av interaktioner med håliga objekt som använder `verify ()` använder Mockito också matchare för att kontrollera om de korrekta argumenten antogs. I likhet med stubbning kan verifiering med matchare introducera en del overhead, särskilt om du verifierar flera samtal med komplexa matchare.

5. Bästa metoder för prestanda **

- Använd specificitet klokt: Använd matchare med rätt nivå för specificitet. Till exempel är 'Anyint ()' mindre specifik och snabbare än 'ekv (4)', men att använda 'ekv (4)' när du behöver verifiera ett specifikt värde är mer exakt och inte påverkar prestandan väsentligt.
- Undvik onödig komplexitet: Undvik att använda anpassade matchare såvida det inte är nödvändigt. Om ett test kräver komplex logik för att matcha argument, överväga att förenkla testet eller använda befintliga matchare kreativt.
- Profilera dina tester: Om du märker prestandaproblem i dina tester, profilera dem för att identifiera flaskhalsar. Det är sällsynt att Mockito -matchare är den främsta orsaken till betydande prestationsproblem, men det är alltid bra att verifiera.

Sammanfattningsvis, medan Mockito-argumentmatchare introducerar en del overhead, är detta i allmänhet inte ett betydande problem om du inte har att göra med extremt komplexa eller prestationskritiska tester. Fördelarna med att använda matchers såsom flexibilitet och tydlighet i testkodet uppväger vanligtvis de mindre prestandakostnaderna.

Citeringar:
]
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-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
]