Общий ответ: Да " насмешливый " - правильный термин здесь.Вы хотите создать «поддельный» объект, который принимает известные входные данные и производит известные выходные данные.
Прежде всего: у меня нет опыта тестирования контроллеров Zend Framework.Судя по таким вопросам, это кажется довольно сложным.Поэтому без некоторого примера кода я не смогу создать работающий / вроде работающий пример.
Однако я не хочу, чтобы он действительно подключался к базе данных, поскольку это не совсем то, что ясейчас тестирую (... или я должен?).
Во-первых: я не уверен, хотите ли вы на самом деле подключиться к базе данных.«Чистая» форма модульного тестирования говорит вам работать с поддельной базой данных (sqlite, в memomry), в то время как в настоящее время я хочу убедиться, что мои запросы работают с реальным экземпляром БД, поэтому я проверяю свои базы данных, обращаясь к объектам снова с реальным БД.Это подводит меня к следующему пункту.
Ваш контроллер не должен общаться с базой данных.Даже (все / многие) модели, говорящие напрямую с базой данных, - это не то, что многие считают правильным MVC, но помещение SQL в контроллеры - это php-эквивалент размещения html в коде PHP вашей логики приложения в течение 4 дней php.
В качестве очень общего ответа:
Посмотрите в коде, где вы получаете $ objectToMockOutInQuestion.Когда это происходит из метода для параметра конструктора, вы выиграли, и вы можете просто передать его. Когда ваш код извлекает его из контейнера, посмотрите, можете ли вы заранее поместить его в этот контейнер.Если это обычный старый оператор new
, возможно, вы захотите изменить свой код.
Надеюсь, это поможет, даже если это только текст