Das Zurücksetzen von Mocks in Mockito ist eine Funktion, mit der Sie Scheinobjekte durch Löschen ihrer Stubbing und Interaktionen wiederverwenden können. Die Verwendung von "Reset ()" wird jedoch im Allgemeinen entmutigt, sofern dies nicht unbedingt erforderlich ist, da es schlecht strukturierte Tests anzeigen kann. Hier sind einige Best Practices für das Zurücksetzen von Messeln in Mockito:
Verstehen, wann `reset ()` verwendet werden soll
-Vermeiden Sie die Verwendung von `reset ()`: Der Hauptgrund `reset ()` besteht darin, Mocks mit Container injiziert zu unterstützen, wie beispielsweise diejenigen, die in Legacy-Code oder Schnittstellen von Drittanbietern verwendet werden. In den meisten Fällen sollten Sie, insbesondere mit gut gestalteter testgesteuerter Code, vermeiden, "Reset ()" und stattdessen auf die Erstellung kleiner, fokussierter Testmethoden zu konzentrieren [2] [4].
- Code -Geruch: Wenn Sie innerhalb einer Testmethode "reset ()` verwenden müssen, ist dies möglicherweise ein Zeichen dafür, dass Ihre Tests zu komplex sind oder zu viele Szenarien abdecken. Dies könnte darauf hinweisen, dass Sie Ihre Tests oder den getesteten Code neu umrüsten müssen [2].
Alternativen zu `reset ()`
- Erstellen Sie neue Mocks: Anstatt Mocks zurückzusetzen, sollten Sie für jede Testmethode neue Mock -Instanzen erstellen. Dieser Ansatz stellt sicher, dass jeder Test mit einem sauberen Schiefer beginnt, wodurch das Risiko von Wechselwirkungen aus früheren Tests verringert wird, die sich auf den Strom auswirken [4].
- Verwenden Sie `clearInvocations ()`.: Wenn Sie nur den Aufrufverlauf löschen müssen (z. B. um Wechselwirkungen zu verifizieren, ohne das Stubbing zu beeinflussen), verwenden Sie `mockito.clearinvocations ()`. Diese Methode beseitigt den Aufrufverlauf, ohne Stubs zurückzusetzen, was in bestimmten Szenarien nützlich sein kann [4].
Best Practices für das Zurücksetzen von Messeln
- Nach jedem Test zurücksetzen: Wenn Sie Mocks zurücksetzen müssen, tun Sie dies nach jeder Testmethode mit einer@After` -Annotation in jungit oder "Aftereach ()` in scalatest. Dies stellt sicher, dass jeder Test mit einem sauberen Scheinzustand beginnt [3] [10].
- Vermeiden Sie das Zurücksetzen vor Tests: Mocks vor dem einzelnen Test kann zu Verwirrung führen, in welchem Zustand sich das Mock zu Beginn des Tests befindet. Es ist im Allgemeinen klarer, nach Tests neue Mocks zu erstellen oder zurückzusetzen [10].
- Verwenden Sie Framework -Funktionen: In Frameworks wie Frühling können Annotationen wie@Mockbean` nach jedem Test automatisch das Mock -Reset des Mock -Resets verarbeiten, wodurch die Bedarf an manuellen Rücksetzungen beseitigt wird [10].
Abschluss
Während Mockito die Methode "Reset () für bestimmte Anwendungsfälle bereitstellt, ist es im Allgemeinen ratsam, die Verwendung zugunsten eines saubereren, fokussierteren Testdesigns zu vermeiden. Durch das Erstellen neuer Mocks für jeden Test oder die Verwendung von Framework -Funktionen zur Verwaltung des Scheinzustands können Sie robuste und wartbare Tests sicherstellen, ohne dass manuelle Zurücksetzungen erforderlich sind.
Zitate:[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-upiturtset-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-everyday-mockito
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-pring-tests-when-using-mockito