Знущання все в тестах може призвести до декількох потенційних підводних каменів, що може негативно вплинути на ефективність та надійність вашої стратегії тестування. Ось деякі з ключових питань, пов’язаних із надмірним знущанням:
1. Брижні тести та тісне з'єднання **
Коли ви знущаєте над кожною залежністю, ваші тести стають щільно поєднаними з деталями реалізації коду, що перевіряється. Це означає, що навіть незначні зміни у внутрішній роботі коду можуть порушити тести, навіть якщо зовнішня поведінка залишається незмінною. Такі тести є крихкими і потребують частих оновлень, що може зайняти багато часу та розчарування [6] [9].
2. Неправдива впевненість та приховані помилки **
Надмірне знущання може призвести до помилкової впевненості у надійності коду. Виділяючи компоненти з макетами, ви можете пропустити проблеми в реальному світі, які проявляються лише тоді, коли всі компоненти взаємодіють разом. Це може призвести до виявлення помилок у виробництві, а не під час тестування, підриваючи мету тестування [1] [9].
3. ЗАВДАННЯ ІНГПЕКСИТЕТА ТА ВІДПОВІДАЛЬНІСТЬ **
Створення та підтримка макетів, особливо для складних систем, може бути складним та трудомістким. По мірі розвитку системи макетів, можливо, потрібно буде часто оновлювати, щоб відобразити зміни залежностей чи поведінки, які можуть бути громіздкими та схильними до помилок [9] [11].
4. Складність у перевірці поведінки в реальному світі **
Знущання все може ускладнити перевірити, як система поводиться в реальних сценаріях. Інтеграційні тести, які включають менше макетів, часто краще підходять для цієї мети. Надмірна залежність від макетів може призвести до тестів, які не точно відображають взаємодії в реальному світі [9] [11].
5. Неефективне використання ресурсів **
Надмірне знущання може призвести до неефективного використання ресурсів. Налаштування макетів може споживати більше часу, ніж написання фактичної логіки тестування, особливо у важких або складних системах на базі даних [2] [11]. Ця неефективність може уповільнити процес розвитку та збільшити витрати на тестування.
6. Перекриття з інтеграційними тестами **
Коли одиничні тести покривають сценарії, які також перевіряються тестами інтеграції без макетів, він викликає питання щодо доданої вартості цими одиничними тестами. Інтеграційні тести часто забезпечують більш всебічне висвітлення поведінки системи без необхідності великого знущання [2] [7].
7. Потенціал для неправильної макетної поведінки **
Якщо макети не точно імітують поведінку реальних об'єктів, які вони замінюють, тести можуть пройти навіть тоді, коли фактична система вийде з ладу. Це може призвести до помилкового почуття безпеки та пропущених помилок [5] [9].
Підсумовуючи це, з глузуванням може бути корисним інструментом для тестування, що надмірне використання це може призвести до крихких тестів, помилкової впевненості та неефективності. Важливо використовувати насмішок розумно та розглянути такі альтернативи, як інтеграційні тести, коли це можливо.
Цитати:[1] https://cs-syd.eu/posts/2021-10-22-why-mocking-is-a-bad-idea
[2] https://softwareengineering.stackexchange.com/questions/454887/how-to-avoid-too-much-mocking-in-unit-tests-in-a-database-heavy-method
[3] https://ryanclements.dev/posts/you-probice-dont-need-mocking
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single-dependences-in-unit-testing
[5] https://softwareengineering.stackexchange.com/questions/382087/how-exactly-should-unit-tests-written-without-mocking-extensive
[6] https://pytest-with-eric.com/mocking/pytest-common-mocking-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_it_me_or_mocking_everything_everywhere_in/
[8] https://stackoverflow.com/questions/38181/when-should-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/what-to-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/mocking-framework-doindy/