Я только недавно прочитал о «Mocking objects» для модульного тестирования, и в настоящее время у меня возникают трудности с реализацией этого подхода в моем приложении.Пожалуйста, позвольте мне объяснить мою проблему.
У меня есть класс модели User
, который зависит от 2 источников данных (базы данных и веб-службы facebook).Класс контроллера просто использует эту модель User
в качестве интерфейса для доступа к данным, и ему все равно, откуда эти данные.
В настоящее время я никогда не проводил никаких модульных тестов этой модели User
, потому что оназависит от внешнего веб-сервиса.Но некоторое время назад я читал об имитации объектов, и теперь я знаю, что это общий подход к модульному тестированию класса, который зависит от внешних ресурсов (как в моем случае).
Теперь я хочу создатьмодульное тестирование для модели User
, но затем я столкнулся с проблемой проектирования: чтобы модель User
использовала поддельный SDK Facebook, я должен внедрить этот поддельный SDK Facebook в объект User (возможно, с помощью установщика),Поэтому я не могу создать SDK Facebook внутри объекта User.Мне нужно построить его вне объекта User, а внедрить SDK в объект User.
Настоящим клиентом моей модели User
является контроллер приложения.,Поэтому я должен создать SDK Facebook внутри контроллера и внедрить его в объект пользователя.Ну, это проблема, потому что я хочу, чтобы мой контроллер был максимально чистым.Я хочу, чтобы мой контроллер не знал об источнике данных приложения.
Я не умею систематически что-то объяснять, так что вы, вероятно, будете спать перед прочтением этого последнего абзаца.Но в любом случае, я хочу спросить, сталкивался ли кто-нибудь здесь с той же проблемой, что и я?Как вы решаете эту проблему?
С уважением, Андре
PS: Я использую Zend Framework, PHP 5.3.