Я разбираюсь с модульным тестированием и изучаю, как разбить мой код на тестируемые биты, но одна вещь, в которой я не совсем понимаю, это то, как я могу написать свой код «более высокого уровня», такой как мой контроллер действия, так что тестирование контроллера не требует прохождения фактического уровня данных (который независимо тестируется в другом месте в моем наборе тестов).
Например - у меня есть проверка пользователя, которая берет имя пользователя / пароль и проверяет их учетную запись и возвращает успешный / неудачный вход в систему:
class Api_AuthController extends Zend_Controller_Action
{
public function validateUserAction()
{
// extract, clean and validate $username from POSTed data
// extract, clean and validate $password from POSTed data
// access the data layer
$accountMapper = new Application_Model_Mapper_Account();
$accounts = $accountMapper(find(array('username' => $username, 'password' => $password));
if (count($accounts) == 1) {
// success
} else {
// failure
}
}
}
Как уже упоминалось - Application_Model_Mapper_Account
и его find()
метод были протестированы в другом модульном тесте, поэтому излишне (и, как я понимаю, модульное тестирование - нежелательно, не говоря уже о том, что оно излишне замедляет мои тесты), чтобы провести тестирование здесь снова , поскольку все, что мне действительно нужно проверить, - это способность действия различать два возможных результата функции поиска.
Итак - как мне подставить макеты для картографа и модели в это действие, чтобы я мог ограничить область действия validateUserAction?