Я понимаю ценность автоматизированного тестирования и использую его там, где проблема достаточно четко определена, чтобы я мог придумать хорошие контрольные примеры. Однако я заметил, что некоторые люди здесь и в StackOverflow делают упор на тестировании только модуля, а не его зависимостей. Здесь я не вижу выгоды.
Пересмешка, чтобы избежать зависимостей тестирования, усложняет тестирование. Это добавляет искусственные требования гибкости / развязки к вашему производственному коду для поддержки имитации. (Я не согласен со всеми, кто говорит, что это способствует хорошему дизайну. Написание дополнительного кода, введение таких вещей, как структуры внедрения зависимостей или иное усложнение вашей кодовой базы, чтобы сделать вещи более гибкими / подключаемыми / расширяемыми / развязанными без реального варианта использования, - это чрезмерная инженерия, а не хороший дизайн.)
Во-вторых, тестирование зависимостей означает, что критический низкоуровневый код, который используется повсеместно, тестируется с использованием входных данных, отличных от тех, о которых явно писал тот, кто написал свои тесты. Я обнаружил множество ошибок в низкоуровневой функциональности, выполняя модульные тесты высокоуровневой функциональности, не высмеивая низкоуровневую функциональность, от которой она зависела. В идеале они были бы найдены в модульных тестах для функциональности низкого уровня, но пропущенные случаи всегда бывают.
Какова другая сторона этого? Действительно ли важно, чтобы модульный тест также не проверял его зависимости? Если так, то почему?
Изменить: я могу понять значение насмешливых внешних зависимостей, таких как базы данных, сети, веб-сервисы и т. Д. (Спасибо Анне Лир за мотивацию, чтобы я прояснил это.) Я имел в виду внутренние зависимости , то есть другие классы, статические функции и т. Д. которые не имеют никаких прямых внешних зависимостей.