Скидання макетів у Mockito - це функція, яка дозволяє повторно використовувати макетні предмети, очищаючи їх заглушку та взаємодії. Однак, використовуючи `reset ()`, як правило, відлякують, якщо це абсолютно не потрібно, оскільки це може вказувати на погано структуровані тести. Ось найкращі практики для скидання макетів у Mockito:
Розуміння, коли використовувати `reset ()` `
-Уникайте використання `reset ()`: Основна причина `` reset () `існує,-це підтримка макетів, що вводяться на контейнер, такі як ті, що використовуються в застарілому коді або сторонніх інтерфейсах. У більшості випадків, особливо з добре розробленим тестовим кодом, слід уникати використання `reset ()` і замість цього зосередитись на створенні невеликих цілеспрямованих методів тестування [2] [4].
- Запах коду: Якщо вам потрібно використовувати `Reset ()` в рамках тестового методу, це може бути ознакою того, що ваші тести занадто складні або охоплюють занадто багато сценаріїв. Це може вказувати на необхідність рефакторів ваших тестів або коду, який перевіряється [2].
Альтернативи до `Скидання ()`
- Створіть нові макети: Замість того, щоб скинути макетні макетів, подумайте про створення нових макетних екземплярів для кожного методу тестування. Цей підхід гарантує, що кожен тест починається з чистого шиферу, зменшуючи ризик взаємодії з попередніх тестів, що впливають на поточний [4].
- Використовуйте `clearInVocations ()`: Якщо вам потрібно лише очистити історію виклику (наприклад, перевірити взаємодії, не впливаючи на стул), використовуйте `mockito.clearInVocations ()`. Цей метод видаляє історію виклику без скидання заглушок, що може бути корисним у певних сценаріях [4].
найкращі практики для скидання макетів
- Скиньте після кожного тесту: Якщо ви повинні скинути макет, зробіть це після кожного методу тестування, використовуючи `@після анотації в junit або` adaleach () `у Scalatest. Це гарантує, що кожен тест починається з чистого макетного стану [3] [10].
- Уникайте скидання перед тестами: Скидання макетів перед кожним тестом може призвести до плутанини щодо того, в якому стані є макет на початку тесту. Зазвичай зрозуміліше створювати нові макети або скинути після тестів [10].
- Використовуйте функції рамок: У рамках, таких як Spring, використовуючи анотації, такі як `@mockbean`, може автоматично обробляти макетні скидання після кожного тесту, усуваючи потребу в ручних скиданнях [10].
Висновок
Хоча Mockito забезпечує метод `reset ()` для конкретних випадків використання, як правило, доцільно уникати його використання на користь більш чистого, більш цілеспрямованого тестового дизайну. Створюючи нові макети для кожного тесту або використовуючи функції рамки для управління макетним станом, ви можете забезпечити надійні та реконструйовані тести без необхідності скидання вручну.
Цитати:[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-aprative-use-of-mockitos-reset-method
[5] https://github.com/mockito/mockitokotlin/issues/513
[6] https://symflower.com/en/company/blog/2024/how-o-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-cean-up-in-in-spring-tests-hen-using-mockito