Сначала несколько определений:
Модульный тест проверяет модули в отрыве от других модулей, но что это означает, что конкретно не определено никаким авторитетным источником, поэтому давайте определим его немного лучше: если границы ввода / вывода пересекаются (независимо от того, является ли этот ввод / вывод сетевым, дисковым, экран или ввод пользовательского интерфейса), есть полуобъективное место, где мы можем нарисовать линию. Если код зависит от ввода / вывода, он пересекает границу блока, и поэтому ему необходимо будет смоделировать блок, ответственный за этот ввод / вывод.
Согласно этому определению, я не вижу веской причины для насмешек над такими вещами, как чистые функции, то есть модульное тестирование поддается чистым функциям или функциям без побочных эффектов.
Если вы хотите объединить юнит-тесты с эффектами, юниты, отвечающие за эффекты, должны быть смоделированы, но, возможно, вам стоит рассмотреть интеграционный тест. Итак, короткий ответ: «Если вам нужно издеваться, спросите себя, действительно ли вам нужен интеграционный тест». Но здесь есть лучший, более длинный ответ, и кроличья нора намного глубже. Придурки могут быть моим любимым запахом кода, потому что есть чему поучиться у них.
Запахи кода
Для этого мы обратимся к Википедии:
В компьютерном программировании запах кода - это любая характеристика исходного кода программы, которая, возможно, указывает на более глубокую проблему.
Это продолжается позже ...
«Запахи - это определенные структуры в коде, которые указывают на нарушение фундаментальных принципов проектирования и негативно влияют на качество проектирования». Сурьянараяна, Гириш (ноябрь 2014). Рефакторинг для разработки программного обеспечения. Морган Кауфманн. п. 258.
Запахи кода обычно не являются ошибками; они не являются технически некорректными и не мешают работе программы. Вместо этого они указывают на недостатки в дизайне, которые могут замедлить разработку или увеличить риск ошибок или сбоев в будущем.
Другими словами, не все запахи кода плохие. Вместо этого они являются общими признаками того, что что-то может не быть выражено в его оптимальной форме, и запах может указывать на возможность улучшить рассматриваемый код.
В случае насмешек, запах указывает на то, что юниты, которые, кажется, требуют насмешек, зависят от юнитов, которые будут насмехаться. Это может быть признаком того, что мы не разложили проблему на атомарно разрешимые части, и это может указывать на недостаток проекта в программном обеспечении.
Суть всех разработок программного обеспечения состоит в том, чтобы разбить большую проблему на более мелкие, независимые части (декомпозиция) и объединить решения, чтобы сформировать приложение, которое решает большую проблему (композицию).
Насмешка необходима, когда единицы, используемые для разбивки большой проблемы на более мелкие части, зависят друг от друга. Иными словами, насмешка необходима, когда наши предполагаемые атомные единицы состава на самом деле не атомарны, и наша стратегия разложения не смогла разложить большую проблему на более мелкие, независимые проблемы, которые необходимо решить.
Что делает пародирование запахом кода, так это то, что в нем нет ничего плохого по своей сути - иногда это очень полезно. Что делает код запаха, так это то, что он может указывать на проблемный источник связи в вашем приложении. Иногда удаление этого источника связи гораздо более продуктивно, чем написание издевательства.
Есть много видов связи, и некоторые из них лучше, чем другие. Понимание того, что макеты являются запахом кода, может научить вас выявлять и избегать худших проявлений на ранних этапах жизненного цикла разработки приложений, прежде чем запах превратится в нечто худшее.