Я думаю, что выбор между написанием фиктивных объектов вручную или с помощью каркаса во многом зависит от типов компонентов, которые вы тестируете.
Если это является частью контракта для тестируемого компонента наОбщайтесь со своими сотрудниками, следуя точному протоколу, и тогда вам нужно использовать инструментальные фиктивные объекты («Mocks»).Зачастую такие протоколы намного проще тестировать с использованием фальшивой инфраструктуры, чем путем ручного кодирования.Рассмотрим компонент, который необходим для открытия репозитория, выполнения некоторых операций чтения и записи в установленном порядке, а затем закрытия репозитория - даже перед лицом исключения.Фальсифицирующая структура облегчит настройку всех необходимых тестов.Приложения, относящиеся к телекоммуникациям и управлению процессами (чтобы выбрать пару случайных примеров), полны компонентов, которые необходимо протестировать таким образом.
С другой стороны, многие компоненты в общих бизнес-приложениях не имеют особых ограничений.о том, как они общаются со своими сотрудниками.Рассмотрим компонент, который выполняет некоторый анализ, скажем, нагрузки университетского курса.Компонент должен получить информацию о преподавателе, студенте и курсе из хранилища.Но не имеет значения, в каком порядке он извлекает данные: инструктор-студент-курс, студент-курс-инструктор, все сразу или что угодно.Нет необходимости проверять и применять шаблон доступа к данным.Действительно, было бы вредно тестировать этот шаблон, так как это потребовало бы конкретной реализации без необходимости.В этом контексте простые неструктурированные фиктивные объекты («Заглушки») являются адекватными, а фальшивый фреймворк, вероятно, излишним.
Я должен отметить, что даже при работе с фреймворком фреймворк может значительно облегчить вашу жизнь.Не всегда можно себе позволить диктовать подписи своих сотрудников.Представьте себе модульное тестирование компонента, который необходим для обработки данных, полученных из толстого интерфейса, например IDataReader или ResultSet .Ручная обработка таких интерфейсов в лучшем случае неприятна - особенно если тестируемый компонент фактически использует только три из множества методов в интерфейсе.
Для меня проекты, для которых требовались фреймворки, почти всегда былихарактер системного программирования (например, проекты базы данных или веб-инфраструктуры, или низкоуровневая сантехника в бизнес-приложении).Что касается проектов по разработке приложений, то мой опыт показывает, что в поле зрения было мало насмешек.
Учитывая, что мы всегда стремимся как можно больше скрывать грязные детали инфраструктуры низкого уровня, может показаться, что мы должны стремитьсячтобы простые заглушки намного превосходили количество насмешек.