Pri rozsiahlom používaní Mockito Argument Matchers existuje niekoľko úvah o výkone, ktoré treba pamätať. Aj keď je Mockito vo všeobecnosti efektívny, rozsiahle využívanie argumentových porovnávačov môže predstaviť určité režijné náklady kvôli spôsobu, akým Mockito procesy týchto zápasníkov.
1. Spracovanie porovnávacích režijných nákladov **
- Hodnotenie argumentového porovnávača: Keď používate argumentových zápasov ako `eq ()`, `any ()` alebo `anyString ()`, Mockito musí tieto zápasníkov vyhodnotiť za behu. Tento proces hodnotenia môže v porovnaní s priamym prenosom presných hodnôt zaviesť mierne režijné náklady. Táto réžia je však zvyčajne zanedbateľná, pokiaľ sa nezaoberáte veľmi veľkým počtom vyvolaní alebo zložitých zápasov.2. Pravidlá kombinovania zápasov **
- Všetky argumenty musia používať Matchers: Ak použijete argument porovnávača pre jeden argument, všetky argumenty musia používať zápasníkov. Toto pravidlo môže viesť k podrobnejšiemu podrobnejšiemu kódu a potenciálne viac režijných nákladov, ak používate zápasníkov pre všetky argumenty, keď iba človek potrebuje konkrétnu podmienku. Napríklad, ak má metóda tri parametre a vy chcete použiť „akýmkoľvek ()` Pre jeden z nich, musíte použiť aj zápasníkov aj pre ostatné dva, aj keď by ste mohli použiť presné hodnoty.3. Vlastnici maters **
- Komplexná logika: Aj keď Mockito poskytuje širokú škálu vstavaných zápasov, možno budete musieť vytvoriť vlastných zápasov pre konkrétnu logiku. Vlastné zápasníci môžu byť výpočtovo drahšie, ak zahŕňajú zložitú logiku alebo operácie. Je to preto, že vyžadujú implementáciu rozhrania „ArgumentMatcher`“ a definovanie metódy `matches ()`, ktorá môže vykonávať ľubovoľné kontroly.4. Overenie nad hlavou **
- Overenie s zápasníkmi: Pri overovaní interakcií s falošnými objektmi pomocou `Overify ()`, Mockito tiež používa zápasníkov na kontrolu, či boli odovzdané správne argumenty. Podobne ako v prípade tvrdenia môže overovanie s zápasníkmi predstaviť niektoré režijné náklady, najmä ak overujete viac hovorov s komplexnými zápasmi.5. Osvedčené postupy pre výkon **
- Používajte špecifickosť múdro: Používajte zápasníkov so správnou úrovňou špecifickosti. Napríklad „AnyInt ()` je menej špecifický a rýchlejší ako `EQ (4)`, ale použitie `EQ (4)` Ak potrebujete overiť konkrétnu hodnotu, je presnejšie a významne ovplyvňuje výkon.- Vyhnite sa zbytočnej zložitosti: Vyhnite sa používaniu vlastných zápasov, pokiaľ to nie je potrebné. Ak test vyžaduje zložitú logiku, aby zodpovedala argumentom, zvážte zjednodušenie testu alebo kreatívne použitie existujúcich zápasov.
- Profil svoje testy: Ak si vo svojich testoch všimnete problémy s výkonom, profilujte ich na identifikáciu prekážok. Je zriedkavé, aby maškáči Mockito boli primárnou príčinou významných problémov s výkonom, ale vždy je dobré overiť.
Stručne povedané, zatiaľ čo zápasníci Mockito argumentov zavádzajú niektoré režijné náklady, vo všeobecnosti to nie je významný problém, pokiaľ sa nezaoberáte mimoriadne zložitými alebo kritickými testmi. Výhody používania materských pracovníkov, ako je flexibilita a jasnosť v testovacom kóde, zvyčajne prevažujú nad menšími nákladmi na výkon.
Citácie:[1] https://stackoverflow.com/questions/56559146/junit-usus-using-eq-argument-matcher-vs-passing-ping-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-verydayy-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-ase-argument-matcher-or-passing-argument-directly-hen-mocko --uni