Как бы вы протестировали этот типичный метод контроллера? - PullRequest
0 голосов
/ 05 августа 2011

Я использую PHPUnit для тестирования моего MVC-приложения. Большая часть кода для моих моделей (в данном примере Site, MStudent, MMenu) хорошо покрыта модульными тестами, но мне сложно тестировать функции на моих контроллерах. Типичная функция контроллера в моей среде выглядит следующим образом:

/**
 * List the mentor's students
 */
public function students()
{
    // set some variables needed in the view
    $menu = MMenu::init($this->mentor, "List of students");
    $filter = "";
    $students = array();

    $sql = "SELECT * "
            . "FROM {Site::app()->settings['tablePrefix']}students s "
            . "WHERE s.pID = {$this->mentor->id} "
            . "ORDER BY s.lastvisit DESC";

    $cmd = Site::app()->db()->prepare($sql);
    if ($cmd->execute() AND ($rows = $cmd->fetchAll(PDO::FETCH_ASSOC)))
    {
        foreach ($rows as $row)
        {
            $students[] = new MStudent($row);
        }
    }

    // call the view
    include Site::app()->viewPath("manage/students");
    exit;
}

Есть ли что-то разумное, чтобы проверить там? Как бы вы это проверили?

EDIT:
Итак, по отзывам Стивена, я могу провести рефакторинг и поместить доступ к базе данных в модель:

public function students()
{
    // set some variables needed in the view
    $menu = MMenu::init($this->mentor, "List of students");
    $filter = "";

    $students = MStudent::studentsFromQuery("SELECT * FROM students WHERE pID=" . $this->mentor->id);

    // call the view
    include Site::app()->viewPath("manage/students");
    exit;
}

Теперь здесь еще меньше проверок. Имеет ли смысл тестировать подобные функции и как это сделать?

1 Ответ

1 голос
/ 05 августа 2011

Следует отметить, что перемещение логики контроллера в модели не исключает необходимости проверять ее в тестах контроллера! Все, что вы двигаете в моделях, должно быть осмеяно.

Редко иметь контроллер, который делает так мало, что на самом деле его можно тестировать модулем так, чтобы это стоило (ИМО). Стоимость / выгода для насмешек над всеми зависимостями просто не окупается. Часто методы контроллера вместо этого тестируются косвенно как часть системных тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...