Если фабрика возвращает конкретные типы, и вы гарантируете, что ваша фабрика всегда возвращает конкретный тип, а не ноль, то нет, в тесте не будет слишком большого значения. Это позволяет вам удостовериться, что со временем это ожидание не нарушится, и такие вещи, как исключения, не будут выброшены.
Этот стиль тестирования просто гарантирует, что по мере внесения изменений в будущем ваше фабричное поведение не изменится без вашего ведома.
Если ваш язык поддерживает это, для ваших зависимостей вы можете использовать рефлексию. Это не всегда легко поддерживать, и ваши тесты очень тесно связаны с вашей реализацией. Вы должны решить, приемлемо ли это. Такой подход имеет тенденцию быть очень хрупким.
Но вы, похоже, действительно пытаетесь отделить, какие классы создаются, от того, как называются конструкторы. Возможно, вам лучше использовать инфраструктуру DI, чтобы получить такую гибкость.
Путем new
- все ваши типы по мере необходимости, вы не даете себе много швов (шов - это место, где вы можете изменить поведение в вашей программе без редактирования в этом месте) для работы.
Однако, используя приведенный вами пример, вы можете получить класс из фабрики. Затем переопределите / mock CreateADependency()
, CreateAnotherDependency()
и CreateAThirdDependency()
. Теперь, когда вы вызываете CreateSomeClassWithDependencies()
, вы можете определить , были ли созданы правильные зависимости.
Примечание: определение «шов» взято из книги Майкла Фезера «Эффективная работа с устаревшим кодом». Он содержит примеры многих методов для добавления тестируемости к непроверенному коду. Вы можете найти это очень полезным.