Если вас беспокоит количество интерфейсов, передаваемых в определенный класс; тогда это, вероятно, признак того, что вы вводите слишком много разрозненных зависимостей.
Если SomeClass зависит от IDependencyA , IDependencyB и IDependencyC , это возможность проверить, можете ли вы извлечь логика, которую класс выполняет с этими тремя интерфейсами в другой класс / интерфейс, IDependencyABC .
Затем, когда вы пишете свои тесты для SomeClass , вам нужно только смоделировать логику, которую теперь обеспечивает IDependencyABC .
Кроме того, если вам все еще некомфортно; может быть, это не тот интерфейс, который вам нужен. Например, классы, которые содержат состояние (например, параметры, передаваемые вокруг), могут быть просто созданы и переданы как конкретные классы. Ответ Джеффа намекал на это, где он упоминает, что передает в ваш конструктор ТОЛЬКО то, что вам нужно. Это обеспечивает меньшую связь между вашими конструкциями и является лучшим указанием цели ваших классов. Просто будьте осторожны, передавая структуры данных (IDictionary <,>).
В конце концов, TDD работает, когда вы чувствуете это теплое нечеткое чувство во время своих циклов. Если вам не по себе, обратите внимание на некоторые запахи кода и исправьте некоторые из этих проблем, чтобы вернуться в нужное русло.