Mockito biedt twee methoden die kunnen worden gebruikt om de staat van mocks te beheren tijdens het testen: `reset ()` en `clearInvocations ()`. Hoewel beide methoden worden gebruikt om de mock -status te beheren, dienen ze verschillende doeleinden en hebben ze verschillende effecten op de mocks.
Mockito's `Reset ()` methode
De methode `reset ()` in mockito wordt gebruikt om een nepobject volledig te resetten. Dit betekent dat het niet alleen de aanroeptellingen wist, maar ook het stompje verwijdert dat op de nep is ingesteld. Dit kan problematisch zijn, omdat u de mock opnieuw moet onderwerpen na het resetten als u specifiek gedrag voor uw tests wilt behouden. Het gebruik van `reset ()` wordt over het algemeen ontmoedigd omdat het kan leiden tot complexe en minder gerichte tests. Het wordt geadviseerd om te voorkomen dat je `reset ()` tenzij absoluut noodzakelijk, omdat het de bedoeling van je tests kan verdoezelen en ze moeilijker kan maken om te handhaven [1] [5] [7].
Mockito's `ClearInvocations ()` methode
De methode `clearInvocations ()`, geïntroduceerd in Mockito 2.1, stelt u in staat om de aanroeptellingen van een mock te wissen zonder de stomp te resetten. Dit betekent dat u dezelfde stubs kunt blijven gebruiken, terwijl u ervoor kunt zorgen dat elke test begint met een schone lei met betrekking tot methode -aanroepingen. Deze methode is handig wanneer u interacties moet verifiëren in een stateful scenario of bij het gebruik van afhankelijkheidsinjectiekaders, maar deze moet nog steeds spaarzaam worden gebruikt. Het wordt in het algemeen aanbevolen om te voorkomen dat het 'clearInvocations ()' wordt gebruikt, tenzij nodig, omdat het ook tests kan compliceren als het niet zorgvuldig wordt gebruikt [1] [4] [9].
Belangrijkste verschillen
- Stubbing: `Reset ()` verwijdert alle stomp, waardoor u de mock opnieuw moet stikken, terwijl `ClearInvocations ()` stompt intact laat.
- Inroeptellingen: beide methoden wissen aan de aanroeptellingen, maar `reset ()` doet dit als onderdeel van een volledige reset, terwijl `clearInvocations ()` specifiek gericht is op invocatie -tellingen.
- Testcomplexiteit: beide methoden kunnen leiden tot complexere tests als ze niet zorgvuldig worden gebruikt, maar `reset ()` heeft de neiging om meer problemen te veroorzaken vanwege de noodzaak om spot opnieuw te stappen.
Samenvattend, hoewel beide methoden kunnen worden gebruikt om de mock -status te beheren, is `reset ()` meer invasief en over het algemeen ontmoedigd, terwijl 'ClearInvocations ()' meer gericht is, maar nog steeds oordeelkundig moeten worden gebruikt om schone en gerichte tests te behouden.
Citaten:[1] https://softwareEngineering.stacKexchange.com/questions/188299/is-this-an-appriate-Use-of-Mockitos-Reset-Method
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearInvocations
[3] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.mockitocore.clearallcaches
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.clearInvocations
[5] https://stackoverflow.com/questions/19441538/what-is-the-correct-alternative-to-resetting-a-mock-after-aftup-in-mockito
[6] https://reflectoring.io/clean-unit-tests-with-mockito/
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-reboot-number-of-times
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-clear-Invocations
[10] https://github.com/mockk/mockk/discussions/842