Resetowanie próbek w Mockito to funkcja, która pozwala ponowne wykorzystanie próbnych obiektów poprzez wyczyszczenie ich uderzeń i interakcji. Jednak użycie „reset () jest ogólnie zniechęcane, chyba że jest to absolutnie konieczne, ponieważ może wskazywać na słabo ustrukturyzowane testy. Oto kilka najlepszych praktyk resetowania próbek w Mockito:
Zrozumienie, kiedy używać `RESET ()`
-Unikaj używania `reset ()`: głównym powodem `` reset () `jest wspieranie próbek wtryskiwanych kontenerem, takich jak te używane w starszym kodzie lub interfejsach innych firm. W większości przypadków, szczególnie w dobrze zaprojektowanym kodzie testowym, należy unikać używania „reset ()” i zamiast tego skupić się na tworzeniu małych, skoncentrowanych metod testowych [2] [4].
- Zapach kodu: jeśli musisz użyć „reset ()” w metodzie testowej, może to być znak, że testy są zbyt złożone lub obejmują zbyt wiele scenariuszy. Może to wskazywać na potrzebę refaktowania testów lub testowanego kodu [2].
Alternatywy dla `RESET ()`
- Utwórz nowe kpiny: Zamiast resetowania próbek, rozważ tworzenie nowych próbnych instancji dla każdej metody testu. Takie podejście zapewnia, że każdy test rozpoczyna się od czystego łupku, zmniejszając ryzyko interakcji z poprzednich testów wpływających na obecny [4].
- Użyj `ClearInvoCations ()`: Jeśli musisz tylko wyczyścić historię wywołania (np. Aby zweryfikować interakcje bez wpływu na uderzenie), użyj `mockito.clearinvoCations ()`. Ta metoda usuwa historię wywoływania bez resetowania odcinków, co może być przydatne w niektórych scenariuszach [4].
Najlepsze praktyki resetowania próbek
- Resetuj po każdym teście: jeśli musisz zresetować próbki, zrób to po każdej metodzie testowej przy użyciu adnotacji `@po 'w Junit lub` poEach () `w Scalatest. Zapewnia to, że każdy test rozpoczyna się od czystego stanu próbnego [3] [10].
- Unikaj resetowania przed testami: Resetowanie próbek przed każdym testem może prowadzić do zamieszania w tym, w jakim stanie jest próba na początku testu. Zasadniczo jest wyraźniejsze tworzenie nowych próbek lub zresetowanie po testach [10].
- Użyj funkcji framework: w ramach takich jak Spring, użycie adnotacji takich jak `@mockbean` może automatycznie obsługiwać próbne resetowanie po każdym teście, eliminując potrzebę ręcznych resetów [10].
Wniosek
Podczas gdy Mockito zapewnia metodę „reset ()` dla określonych przypadków użycia, ogólnie wskazane jest unikanie jej stosowania na korzyść czystszego, bardziej ukierunkowanego projektu testowego. Tworząc nowe kpiny dla każdego testu lub używając funkcji Framework do zarządzania próbnym stanem, możesz zapewnić solidne i możliwe do utrzymania testy bez potrzeby ręcznych resetów.
Cytaty:[1] https://www.tutorialspoint.com/mocksito/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-apprey-use-of-gocchitos-eset-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-mockoto
[10] https://stackoverflow.com/questions/18164123/how to-le-lean-up-pocks-in-spring-tests-hen-using-mockoto