Я использую 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;
}
Теперь здесь еще меньше проверок. Имеет ли смысл тестировать подобные функции и как это сделать?