Mockito's `reset ()` methode is een functie waarmee u een mock -object kunt resetten zodat het kan worden hergebruikt. Het gebruik ervan wordt echter in het algemeen ontmoedigd door Mockito -ontwikkelaars en gebruikers, omdat het een slecht ontworpen tests of code kan aangeven die overdreven complex en moeilijk te testen zijn [7] [9]. In plaats daarvan is de aanbevolen aanpak om nieuwe mocks te maken voor elke testmethode om onafhankelijkheid en duidelijkheid bij het testen te garanderen [7] [9].
Vergelijking met andere spottende bibliotheken
1. JMOCK2: In tegenstelling tot Mockito gebruikt JMOCK2 een context om verwachtingen en nepinformatie te beheren, die wordt herbouwd voor elke testmethode. Dit betekent dat JMOCK2 geen expliciete reset vereist zoals Mockito doet [10]. De aanpak van JMOCK2 helpt de testisolatie te behouden zonder de mocks handmatig opnieuw in te stellen.
2. EASYMOCK: EasyMock vereist meestal ook geen resetmethode. Het is ontworpen om nieuwe nepobjecten te maken voor elke test, vergelijkbaar met de aanbevolen praktijk met Mockito. Szczepan Faber, een Mockito -ontwikkelaar, vermeldt dat hij nooit een reset -functie nodig had tijdens het gebruik van Easymock [8].
3. Mockito vs. andere bibliotheken: in het algemeen bevorderen andere spottende bibliotheken zoals JMOCK2 en EASYMOCK een schonere testbenadering door automatisch Mock State te beheren of de creatie van nieuwe mocks voor elke test aan te moedigen. Mockito's `reset ()` methode is meer een uitzondering dan de norm in spotkaders.
Best practices
- Vermijd het gebruik van `reset ()`: tenzij absoluut noodzakelijk, zoals wanneer een mock wordt geïnjecteerd door een container en niet kan worden nagebouwd voor elke test, is het raadzaam om te voorkomen dat het 'reset () `wordt gebruikt. Richt zich in plaats daarvan op het maken van eenvoudige, gerichte tests met nieuwe mocks voor elk scenario [7] [9].
- Gebruik `clearInvocations ()`: als u interacties moet wissen zonder stomp te resetten, gebruik dan `clearInvocations ()`. Met deze methode kunt u stompelen behouden terwijl u eventuele opgenomen interacties wist, wat nuttig kan zijn in bepaalde scenario's [5].
- Refactorcode voor testbaarheid: als u merkt dat u `reset ()` vaak moet gebruiken, kan dit erop duiden dat uw code kan profiteren van refactoring om deze te testbaarder maken. Dit kan inhouden dat het afbreken van complexe methoden of het verbeteren van de afhankelijkheidsinjectie [9].
Samenvattend, hoewel Mockito een `reset ()` methode biedt, wordt het gebruik ervan over het algemeen ontmoedigd om nieuwe mocks voor elke test te maken. Andere spottende bibliotheken bevorderen vaak vergelijkbare praktijken en benadrukken schone en onafhankelijke tests ten opzichte van complex mock management.
Citaten:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://groups.google.com/g/mockito/c/y_ihdc8lx_m
[3] https://www.vogla.com/tutorials/mockito/article.html
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[5] https://www.toptal.com/java/a-guide-to-reyday-mockito
[6] https://www.jrebel.com/blog/mock-unit-testing-with-mockito
[7] https://stackoverflow.com/questions/34412106/appriate-Use-of-Mockito-reset
[8] https://groups.google.com/g/mockito/c/_vxg33tlzl8
[9] https://softwareEngineering.stackexchange.com/questions/188299/is-this-an-appriate-use-of-mockitos-reset-method
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito