Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Wat zijn de best practices voor het resetten van mocks in Mockito


Wat zijn de best practices voor het resetten van mocks in Mockito


Het resetten van mocks in Mockito is een functie waarmee u mock -objecten kunt hergebruiken door hun stomp en interacties te wissen. Het gebruik van `reset ()` wordt echter over het algemeen ontmoedigd tenzij absoluut noodzakelijk, omdat het een slecht gestructureerde tests kan aangeven. Hier zijn enkele best practices voor het resetten van mocks in Mockito:

begrijpen wanneer te gebruiken `reset ()`

-Vermijd het gebruik van `reset ()`: de primaire reden `reset ()` bestaat om container-geïnjecteerde mocks te ondersteunen, zoals die welke worden gebruikt in legacy code of interfaces van derden. In de meeste gevallen, vooral met goed ontworpen testgestuurde code, moet u voorkomen dat u `reset ()` gebruikt en in plaats daarvan richten op het maken van kleine, gerichte testmethoden [2] [4].

- Codegeur: als u merkt dat u `reset ()` binnen een testmethode moet gebruiken, kan dit een teken zijn dat uw tests te complex zijn of te veel scenario's behandelen. Dit kan wijzen op de noodzaak om uw tests te refacteren of de geteste code [2].

alternatieven voor `reset ()`

- Maak nieuwe mocks: in plaats van mocks te resetten, overweeg dan om nieuwe nepinstanties te maken voor elke testmethode. Deze benadering zorgt ervoor dat elke test begint met een schone lei, waardoor het risico op interacties van eerdere tests de huidige tests vermindert [4].

- Gebruik `clearInvocations ()`: als u alleen de aanroepingsgeschiedenis hoeft te wissen (bijvoorbeeld om interacties te verifiëren zonder stomp te beïnvloeden), gebruik dan `mockito.clearInvocations ()`. Deze methode verwijdert de aanroepingsgeschiedenis zonder stubs te resetten, wat nuttig kan zijn in bepaalde scenario's [4].

Best practices voor het resetten van mocks

- Reset na elke test: als u Mocks moet resetten, doe dit dan na elke testmethode met behulp van een `@after` annotatie in Junit of` Aftereach () `in Scalatest. Dit zorgt ervoor dat elke test begint met een schone nepstatus [3] [10].

- Vermijd opnieuw instellen vóór tests: het resetten van mocks vóór elke test kan leiden tot verwarring over welke staat de mock aan het begin van de test is. Het is over het algemeen duidelijker om nieuwe mocks te maken of na tests te resetten [10].

- Gebruik framework -functies: in frameworks zoals Spring kan het gebruik van annotaties zoals `@mockbean` na elke test automatisch omgaan met het opnieuw instellen van de nep na elke test, waardoor de behoefte aan handmatige resets wordt geëlimineerd [10].

Conclusie

Hoewel Mockito de methode `reset ()` voor specifieke use cases biedt, is het over het algemeen raadzaam om het gebruik ervan te voorkomen ten gunste van het schonere, meer gerichte testontwerp. Door nieuwe mocks te maken voor elke test of het gebruik van framework -functies om Mock State te beheren, kunt u zorgen voor robuuste en onderhoudbare tests zonder handmatige resets.

Citaten:
[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://site.mockito.org/javadoc/current/org/mockito/mockito.html
[3] https://twitter.github.io/finatra/user-guide/testing/mocks.html
[4] https://softwareEngineering.stackexchange.com/questions/188299/is-this-an-appriate-use-of-mockitos-reset-method
[5] https://github.com/mockito/mockito-kotlin/issues/513
[6] https://symflower.com/en/company/blog/2024/how-to-do-mocking-spring-boot/
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[8] https://github.com/mockito/mockito/issues/183
[9] https://www.toptal.com/java/a-guide-to-reyday-mockito
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito