В большинстве случаев, если мне нужно издеваться над другим издеванием, я нахожу зависимость, которая имеет больше смысла в другом направлении. Иными словами, mock-returning-mock обычно указывает на нарушение принципа обращения зависимостей.
Одно распространенное исключение: фабрика, которая создает объекты (в отличие от «держателя», который просто возвращает один и тот же объект каждый раз). Если мне нужно создать несколько объектов одного типа в течение моей жизни, тогда мне может понадобиться ObjectFactory
и вызвать #createObject()
, а затем, возможно, установить ожидания для объектов. Тем не менее, я бы поставил под сомнение это. Возможно, что-то еще на один уровень вверх по стеку вызовов создаст для меня Object
s и выдаст их мне по мере необходимости.
В случае ObjectHolder
, вместо того, чтобы Object
получать *1010*, я предпочитаю напрямую зависеть от Object
и заставлять моего абонента отдавать его мне так, как ему хочется. Это учитывает желаемое свойство дизайна независимость от контекста .
Одной из конкретных версий этой проблемы является шаблон «Виртуальные часы». Иногда вам нужно зависеть от виртуальных часов, но часто лучше просто запросить временную метку (шаблон «Мгновенный запрос») или, в худшем случае, поток временных меток, откуда бы они ни исходили. Тесты могут предоставить управляемый поток удобных жестко закодированных временных меток, но также легко превратить системные часы в поток временных меток.