Mockito предоставляет два метода, которые можно использовать для управления состоянием макетов во время тестирования: `Reset ()` и `clearInvocations ()`. В то время как оба метода используются для управления макетом, они служат разным целям и оказывают четкое влияние на макет.
Mockito's `reset ()` метод
Метод `reset ()` в Mockito используется для полного сброса макетного объекта. Это означает, что он не только очищает количество вызова, но и удаляет любые загрязнения, которые были установлены на макете. Это может быть проблематично, потому что это требует, чтобы вы повторно установили макет после его сброса, если вы хотите сохранить конкретное поведение для ваших тестов. Использование `reset ()`, как правило, обескуражено, потому что оно может привести к сложным и менее сфокусированным тестам. Рекомендуется избегать использования `reset ()`, если это не абсолютно необходимо, так как он может скрыть намерение ваших тестов и затруднить их поддержание [1] [5] [7].
Mockito's `clearInvocations ()` Метод
Метод `clearInvocations ()`, введенный в Mockito 2.1, позволяет очистить количество вызовов макета, не сбросив его загрязнения. Это означает, что вы можете продолжать использовать одни и те же заглушки, обеспечивая, чтобы каждый тест начинался с чистого сланца в отношении вызова метода. Этот метод полезен, когда вам необходимо проверить взаимодействия в сценарии состояния или при использовании рамок впрыска зависимостей, но его все равно следует использовать экономно. Обычно рекомендуется избегать использования `clearInvocations ()`, если это необходимо, поскольку это также может усложнить тесты, если не используется вдумчиво [1] [4] [9].
Ключевые различия
- Заглушка: `сбросить ()` Удаляет все загрязнения, требуя от вас повторного утилизации макета, тогда как `clearInvocations ()` листья загрязняют неповрежденные.
- Подсчет вызова: оба метода очищают подсчет вызова, но `reset ()` делает это как часть полного сброса, в то время как `clearInvocations ()` специально нацелен на подсчет вызова.
- Сложность теста: оба метода могут привести к более сложным тестам, если не используются тщательно, но `reset ()` имеет тенденцию вызывать больше проблем из-за необходимости повторного завода макетов.
Таким образом, в то время как оба метода могут использоваться для управления макетным состоянием, «reset ()» является более инвазивным и в целом обескураженным, тогда как «ClearInvocations» () `более целенаправленно, но все равно следует разумно использовать для поддержания чистых и сфокусированных тестов.
Цитаты:[1] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-Apropriate-us-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-mock-fter-setup-in-mockito
[6] https://reflectoring.io/clean-unit-tests-with-mockito/
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-reboot-number-fime
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/mockito.html
[9] https://wesome.org/mockito-3-clear-inwocations
[10] https://github.com/mockk/mockk/discussions/842