Метод Mockito `reset ()` - это функция, которая позволяет вам сбросить фиктивный объект, чтобы его можно было повторно использовать. Тем не менее, его использование, как правило, не рекомендуется разработчиками и пользователями Mockito, поскольку это может указывать на плохо разработанные тесты или код, который является чрезмерно сложным и трудным для тестирования чистое [7] [9]. Вместо этого рекомендуемый подход заключается в создании новых макетов для каждого метода испытаний для обеспечения независимости и ясности в тестировании [7] [9].
Сравнение с другими насмешливыми библиотеками
1. Jmock2: в отличие от Mockito, Jmock2 использует контекст для управления ожиданиями и макетной информацией, которая восстанавливается для каждого метода испытаний. Это означает, что Jmock2 не требует явного сброса, как это делает Mockito [10]. Подход JMock2 помогает поддерживать тестовую изоляцию без необходимости вручную сбросить макет.
2. EasyMock: EasyMock также не требует метода сброса. Он предназначен для создания новых фиктивных объектов для каждого теста, аналогичного рекомендуемой практике с Mockito. Zczepan Faber, разработчик Mockito, упоминает, что ему никогда не нужна функция сброса при использовании EasyMock [8].
3. Mockito против других библиотек: в целом, другие издевательские библиотеки, такие как JMock2 и EasyMock, продвигают более чистый подход к тестированию, либо автоматически управляя макетным состоянием, либо поощряя создание новых макетов для каждого теста. Метод Mockito `reset ()` является скорее исключением, чем нормой в смешных рамках.
Лучшие практики
- Избегайте использования `reset ()`: Если только абсолютно необходимо, например, когда макет вводится контейнером и не может быть воссоздан для каждого теста, рекомендуется избегать использования `reset ()`. Вместо этого сосредоточьтесь на создании простых, сфокусированных тестов с новыми макетами для каждого сценария [7] [9].
- Используйте `clearInvocations ()`: Если вам нужно очистить взаимодействия без сброса загрязнения, используйте `clearInvocations ()`. Этот метод позволяет сохранить загрязнение при очистке любых записанных взаимодействий, которые могут быть полезны в определенных сценариях [5].
- Рефактор для тестируемости: если вам нужно использовать `reset ()` Часто, это может указывать на то, что ваш код может извлечь выгоду из рефакторинга, чтобы сделать его более тестируемым. Это может включать разрушение сложных методов или улучшение инъекции зависимостей [9].
Таким образом, в то время как Mockito предоставляет метод `reset ()`, его использование, как правило, обескураживается в пользу создания новых макетов для каждого теста. Другие насмешливые библиотеки часто способствуют аналогичной практике, подчеркивая чистые и независимые тесты на сложное управление макетом.
Цитаты:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://groups.google.com/g/mockito/c/y_ihdc8lx_m
[3] https://www.vogella.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-te-everyday-mockito
[6] https://www.jrebel.com/blog/mock-unit-testing-with-mockito
[7] https://stackoverflow.com/questions/34412106/Appopriate-us-of-mockito-reset
[8] https://groups.google.com/g/mockito/c/_vxg33tlzl8
[9] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-Apropriate-us-of-mockitos-reset-method
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito