„Mockito“ argumentų atitikmenys yra galingi įrankiai, naudojami atliekant vienetų testavimą, kad būtų galima lanksčiai nurodyti argumentus nustatant maketus. Tačiau jie turi keletą apribojimų:
1. Naudojimo kontekstas: Argumentų rungtynes galima naudoti tik kaupimosi ar patikrinimo metodų kontekste. Jie negali būti naudojami skambinant į bandomąjį objektą. Pavyzdžiui, jūs negalite naudoti „AnyString ()“, kai skambinate metodu ant tikro objekto; Vietoj to, turėtumėte naudoti konkrečią vertę [1] [5].
2. Argumentų nuoseklumas: Kai vienam argumentui naudojamasi argumentų atitiktis, visi kiti argumentai taip pat turi naudoti atitikmenis. Negalite sumaišyti atitikmenų su konkrečiomis vertėmis dėl skirtingų argumentų to paties metodo skambučio. Tai yra dažnas „invaliduseOfMatcherSexception“ šaltinis [7] [8].
3. Sielgimo apribojimai: „Mockito“ negali tyčiojamės iš tam tikrų metodų, tokių kaip „Equals ()“, „HashCode ()“ ar galutiniai metodai. Nors argumentų rungtynes galima naudoti naudojant metodus, kurie gali būti išjudami iš šybe, jie neišleidžia galimybių tyčiojamės iš šių ribotų metodų [3].
4. Argumentų atitikties tipai: „Mockito“ pateikia įvairius integruotus argumentų atitikmenis (pvz., „Anyint ()`, `AnyString ()`, `isNull ()`), tačiau turite pasirinkti teisingą argumento tipą. Pvz., Naudojant „bet kuris ()` su primityviu tipu, gali neveikti taip, kaip tikėtasi; Vietoj to, naudokite konkretesnį atitiktį, pavyzdžiui, „AnyBoolean ()` loginiams parametrams [7].
5. Pasirinktiniai argumentų atitikmenys: Nors „Mockito“ leidžia kurti pasirinktinius atitikmenis, naudojant „argthat ()“ metodą, norint įgyvendinti „ArgumentMatcher“ sąsają, reikia atidžiai apsvarstyti, kad atitiktis elgiasi taip, kaip tikėtasi skirtingais scenarijais [2] [4].
6. Integracija su kitomis bibliotekomis: Kai naudojate „Mockito“ su kitomis bibliotekomis, tokiomis kaip „Hamcrest“, įsitikinkite, kad integracija yra tinkamai tvarkoma. Pvz., „Sonarque“ gali pažymėti tam tikrus „argthat ()` su „Hamcrest“ atitikmenimis kaip neteisingus, net jei jie galioja [4].
Apibendrinant galima pasakyti, kad nors „Mockito“ argumentų atitikmenys yra universalūs, jų naudojimas apsiriboja konkrečiais kontekstais ir reikalauja nuoseklumo tarp metodo argumentų. Be to, jie neišvengia esminių „Mockito“ apribojimų dėl tam tikrų metodų ar klasių.
Citatos:[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-ruge-s6073-mockito-argument-matchers-in-case-fase-mockohamcrest-adapter/38429
[5] https://groups.google.com/g/mockito/c/zi6pcqudtco
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.argumentMatchers.isnull
[7] https://stackoverflow.com/questions/16458136/mockito-invalid-use-of-argument-matchers
[8] https://www.baeldung.com/mockito-argument-matchers