Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ali obstajajo kakršni koli premisleki o uspešnosti, če veliko uporabljate Mackito Argument Matchers


Ali obstajajo kakršni koli premisleki o uspešnosti, če veliko uporabljate Mackito Argument Matchers


Pri obsežnem uporabi Mackito Argument Matchers je treba upoštevati več pomislekov o uspešnosti. Medtem ko je Mockito na splošno učinkovit, lahko obsežna uporaba argumentov Matchers uvede nekaj režijskih stroškov zaradi načina, kako Mockito obdeluje te Matchers.

1. Obdelava matcher nad glavo **

- Ocenjevanje argumentov: Ko uporabljate argumentalne ujemanje, kot so `eq ()`, `kateri koli ()` ali `any AnyString ()`, mora Mockito oceniti te Matchers med izvajanjem. Ta postopek ocenjevanja lahko v primerjavi z neposrednimi natančnimi vrednostmi uvede rahlo režijsko glavo. Vendar je ta režijski strošek običajno zanemarljiv, razen če se ukvarjate z zelo velikim številom priklic ali zapletenih dvobojev.

2. Pravila kombinacije matcher **

- Vsi argumenti morajo uporabljati Matchers: Če za en argument uporabite argument ujemanje, morajo vsi argumenti uporabljati Matchers. To pravilo lahko privede do bolj dobesedne kode in potencialno več režijskih stroškov, če uporabljate Matchers za vse argumente, kadar samo človek potrebuje določen pogoj. Na primer, če ima metoda tri parametre in želite uporabiti "katero koli ()" za enega od njih, morate uporabiti Matchers tudi za druga dva, tudi če bi lahko uporabili natančne vrednosti.

3. Ujemalci po meri **

- Kompleksna logika: Medtem ko Mockito ponuja široko paleto vgrajenih ujemanja, boste morda morali ustvariti matchers po meri za določeno logiko. Ujemalci po meri so lahko računalniško dragi, če vključujejo zapleteno logiko ali operacije. To je zato, ker zahtevajo izvajanje vmesnika "argumentMatcher" in določiti metodo "matches ()", ki lahko izvaja poljubne preglede.

4. Preverjanje nad glavo **

- Preverjanje z Matchers: Pri preverjanju interakcij s posmehljivimi predmeti z uporabo `preverja ()`, Mockito uporablja tudi Matchers za preverjanje, ali so bili izvedeni pravilni argumenti. Podobno kot pri trditvi lahko tudi preverjanje z Matcherji uvede nekaj režijskih stroškov, še posebej, če preverjate več klicev s kompleksnimi ujemalci.

5. Najboljše prakse za uspešnost **

- pametno uporabite specifičnost: uporabite Matchers s pravo stopnjo specifičnosti. Na primer, `anyInt ()` je manj specifičen in hitrejši od `Eq (4)`, vendar je uporaba `Eq (4)`, ko morate preveriti določeno vrednost, natančnejša in ne vpliva bistveno na uspešnost.
- Izogibajte se nepotrebne zapletenosti: Izogibajte se uporabi ujemalnikov po meri, če ni potrebno. Če test zahteva kompleksno logiko, da se ujema z argumenti, razmislite o poenostavitvi testa ali ustvarjalno uporabo obstoječih Matchers.
- Profilirajte Vaše teste: Če v svojih testih opazite težave z zmogljivostjo, jih prodajte, da prepoznate ozka grla. Redko je, da so Mockito Matcherji glavni vzrok pomembnih težav z uspešnostjo, vendar je vedno dobro preveriti.

Če povzamemo, medtem ko MOCKITO Argument Matchers uvajajo nekaj režijskih stroškov, to na splošno ni pomembna skrb, razen če se ukvarjate z izjemno zapletenimi ali kritičnimi testi. Prednosti uporabe Matchersov, kot sta prilagodljivost in jasnost v preskusni kodi, običajno odtehtajo manjše stroške uspešnosti.

Navedbe:
[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-tring-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-everyday-mockito
[6] https://github.com/etorreborre/Specs2/isissue/854
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.additialMatchers
[8] https://stackoverflow.com/questions/73046134/when-should-i-use-argument-matcher-or-passing-argument-directly-when-when-mockito-uni