Při rozsáhlém používání argumentu Mockito argumentů je třeba mít na paměti několik výkonu. Zatímco Mockito je obecně efektivní, rozsáhlé používání argumentových zápasů může představit určitou režii kvůli způsobu, jakým Mockito zpracovává tyto porovnávače.
1.. Matcher zpracování režie **
- Vyhodnocení argumentu Matcher: Když používáte porovnávače argumentů jako `eq ()`, `libovolné ()` nebo `anyString ()`, mockito musí tyto porovnávače vyhodnotit za běhu. Tento proces hodnocení může zavést mírnou režii ve srovnání s přímou předáváním přesných hodnot. Tato režie je však obvykle zanedbatelná, pokud se nezabýváte velmi velkým počtem vyvolávání nebo složitých zápasů.2. Pravidla kombinace Matcher **
- Všechny argumenty musí používat Matchers: Pokud pro jeden argument použijete argumentův porovnávač, musí všechny argumenty používat porovnávače. Toto pravidlo může vést k podrobnějšímu kódu a potenciálně více režijních nákladů, pokud používáte Matchers pro všechny argumenty, pokud pouze jeden potřebuje konkrétní podmínku. Například, pokud má metoda tři parametry a chcete použít pro jednu z nich `libovolné ()`, musíte pro další dva také použít pomlčky, i když byste mohli použít přesné hodnoty.3. Custom Matchers **
- Komplexní logika: Zatímco Mockito poskytuje širokou škálu vestavěných porovnávačů, možná budete muset vytvořit vlastní porovnávače pro konkrétní logiku. Vlastní porovnávače mohou být výpočetně dražší, pokud zahrnují komplexní logiku nebo operace. Je to proto, že vyžadují implementaci rozhraní `argumentMatcher` a definování metody` zápasů () `, která může provádět libovolné kontroly.4. Ověření režie **
- Ověření s Matchers: Při ověřování interakcí s falešnými objekty pomocí `ověřuje ()`, Mockito také používá zápasky ke kontrole, zda byly schváleny správné argumenty. Podobně jako u otroctví může ověření s Matchers představit některé režijní náklady, zejména pokud ověřujete více hovorů s komplexními zápasů.5. Nejlepší postupy pro výkon **
- Používejte specificitu moudře: Používejte porovnávače se správnou úrovní specifičnosti. Například „Anyint ()“ je méně specifický a rychlejší než `Eq (4)`, ale pomocí `Eq (4)`, když potřebujete ověřit konkrétní hodnotu, je přesnější a významně neovlivní výkon.- Vyvarujte se zbytečné složitosti: Vyvarujte se používání vlastních zápasů, pokud to není nutné. Pokud test vyžaduje složitou logiku, aby odpovídala argumentům, zvažte zjednodušení testu nebo kreativně používání stávajících zápasů.
- Profil své testy: Pokud si všimnete problémů s výkonem ve svých testech, profilujte je a identifikujte úzká místa. Pro Mockito Matchers je vzácné být primární příčinou významných problémů s výkonem, ale vždy je dobré ověřit.
Stručně řečeno, zatímco MOCKITO argumenty Matchers zavádějí některé režijní náklady, obecně to není významný problém, pokud se nezabýváte extrémně složitými nebo kritickými testy. Výhody používání Matchersů, jako je flexibilita a jasnost v testovacím kódu, obvykle převažují nad malými náklady na výkon.
Citace:[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-catcher-vs--string-dictly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockIto-argument-machers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-amockito
[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-testing-advisor/selenium/classs/org.mockito.additionalMatchers
[8] https://stackoverflow.com/questions/73046134/WHEN-SULD-USUSE-ARGUMENT-OR-PASSING-ARGUMENTLY-WHEN-MOCKITO-UNI