Измешивание всего в тестах может привести к нескольким потенциальным ловушкам, что может негативно повлиять на эффективность и надежность вашей стратегии тестирования. Вот некоторые из ключевых вопросов, связанных с чрезмерным насмешением:
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-comcing-is-a-a-abad-idea
[2] https://softwareengineering.stackexchange.com/questions/454887/how-to-avoid-too-much-mocking-in-unit-tests-in-adatabasehay-method
[3] https://ryanclements.dev/posts/youbly-dont-need-coming
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single-lependencies-in-unit-тестирование
[5] https://softwareengineering.stackexchange.com/questions/382087/how-exactly-should-unit-tests-be-written-without-mocking-extensiby
[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-lowside/