В настоящее время я пытаюсь изучить Zend Framework, и поэтому я купил книгу "Zend Framework в действии".
В главе 3 вводится базовая модель и контроллер вместе с модульными тестами для обоих из них. Основной контроллер выглядит следующим образом:
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->view->title = 'Welcome';
$placesFinder = new Places();
$this->view->places = $placesFinder->fetchLatest();
}
}
Places
- это класс модели, который извлекает последние места из базы данных. Что меня беспокоит: как я должен тестировать IndexController
в изоляции? Поскольку ссылка на класс Places
является "жестко запрограммированной", я не могу вводить любые заглушки или mocks в IndexController
.
То, что я хотел бы иметь, это что-то вроде этого:
class IndexController extends Zend_Controller_Action
{
private $placesFinder;
// Here I can inject anything: mock, stub, the real instance
public function setPlacesFinder($places)
{
$this->placesFinder = $places;
}
public function indexAction()
{
$this->view->title = 'Welcome';
$this->view->places = $this->placesFinder->fetchLatest();
}
}
Первый пример кода, который я опубликовал, наиболее определенно НЕ unit test дружественный, поскольку IndexController
не может быть протестирован изолированно. Второй - намного лучше. Теперь мне просто нужно каким-то образом ввести экземпляры модели в объекты контроллера.
Я знаю, что Zend Framework сама по себе не имеет компонента для инъекций зависимостей. Но есть ли какие-то хорошие рамки для PHP, можно ли использовать их вместе с Zend Framework? Или есть ли другой способ сделать это в Zend Framework?