Как организовать тестирование контроллеров в паттерне MVC с помощью phpUnit?

Имеется класс контроллера cabinet_conrtoller c методом index():

class cabinet_controller
{
    ...
    public function index()
    {
        ...
        $users = new users_model();
        $user = $users->get(array('id'=>$_SESSION['user_id']));
        ...
    }
    ...
}


Соответственно, хочется протестировать его так, чтобы не пришлось создавать экземпляр модели users_model, а каким-то образом "подменить" его (чтобы не пришлось подключаться к настоящей базе и вообще абстрагироваться от классов модели в принципе).

Читал про моки в phpUnit, но во всех примерах созданный мок явным образом передается в метод класса, который мы тестируем. Что-то в духе:

public function testIndex()
{
    $users_model = $this->getMock('users_model');
    $users_model->expects($this->any())
                ->method('get')
                ->will($this->returnValue(array(...));

    $cabinet_controller = new cabinet_controller();
    $cabinet_controller->index($users_model);
}


А как быть, если экземпляр класса создается в самом тестируемом методе?

И вообще, прав ли я тестируя контроллеры таким образом?
  • Вопрос задан
  • 2839 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы