В одном масштабе да, макеты предназначены для моделирования внешних источников данных, таких как база данных или веб-сервис. Однако в более точном масштабе, если вы разрабатываете слабосвязанный код, вы можете произвольно рисовать линии по всему коду относительно того, что в любой момент может быть «внешней системой». Возьмите проект, над которым я сейчас работаю:
Когда кто-то пытается зарегистрироваться, CheckInUi отправляет объект CheckInInfo объекту CheckInMediator , который проверяет его, используя CheckInValidator затем, если все в порядке, он заполняет объект домена с именем Транзакция с помощью CheckInInfo , используя CheckInInfoAdapter , затем передает Транзакцию в экземпляр ITransactionDao.SaveTransaction () для постоянства.
Я сейчас пишу несколько автоматизированных интеграционных тестов и, очевидно, CheckInUi и ITransactionDao являются окнами для внешних систем, и они должны быть издевались. Но кто сказал, что в какой-то момент CheckInValidator не будет звонить в веб-службу? Вот почему, когда вы пишете модульные тесты , вы предполагаете, что все, кроме специфических функций вашего класса, является внешней системой. Поэтому в моем модульном тесте CheckInMediator я макетирую все объекты, с которыми он разговаривает.
РЕДАКТИРОВАТЬ: Гишу технически правильно, не все должны быть подделаны, например, я не насмехаюсь CheckInInfo , так как это просто контейнер для данных. Однако все, что вы когда-либо видели в качестве внешней службы (а это почти все, что преобразует данные или имеет побочные эффекты), должно быть осмеяно.
Мне нравится аналогия - думать о правильно слабосвязанном дизайне как о поле, вокруг которого стоят люди, играющие в улов. Когда кому-то передают мяч, он может бросить совершенно другой мяч другому человеку, он может даже бросить несколько шаров подряд другим людям или бросить мяч и подождать, чтобы получить его обратно, прежде чем бросить его другому человеку. Это странная игра.
Теперь, будучи их тренером и менеджером, вы, конечно, хотите проверить, как работает ваша команда в целом, чтобы у вас была командная практика (интеграционные тесты), но у вас также есть каждый игрок, который тренируется самостоятельно против бэкстопов и бросков ( юнит тесты с макетами). Единственное, чего не хватает в этой картине - это ложные ожидания, и поэтому наши шары замазываются черной смолой, чтобы они пачкали заднюю часть при попадании в нее. У каждого обратного стопа есть «целевая область», к которой человек стремится, и если в конце пробного пробега в целевой области нет черной метки, вы знаете, что что-то не так, и человеку нужна его техника.
Действительно потратьте время, чтобы выучить это должным образом, день, когда я понял, что Мокс был огромным ха-ха-моментом. Объедините это с инверсией контрольного контейнера, и я никогда не вернусь.
Кстати, один из наших ИТ-специалистов только что пришел и дал мне бесплатный ноутбук!