Как лучше отделить слой данных и ограничить объем моих модульных тестов? - PullRequest
3 голосов
/ 03 июня 2011

Я разбираюсь с модульным тестированием и изучаю, как разбить мой код на тестируемые биты, но одна вещь, в которой я не совсем понимаю, это то, как я могу написать свой код «более высокого уровня», такой как мой контроллер действия, так что тестирование контроллера не требует прохождения фактического уровня данных (который независимо тестируется в другом месте в моем наборе тестов).

Например - у меня есть проверка пользователя, которая берет имя пользователя / пароль и проверяет их учетную запись и возвращает успешный / неудачный вход в систему:

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?

1 Ответ

1 голос
/ 03 июня 2011

Я из мира .net, но мы используем Инверсия контейнеров Control, чтобы позволить нам вводить любые зависимости в контроллер.Таким образом, вы можете смоделировать любые зависимости, чтобы вести себя так, как вы хотите, и сосредоточить свое тестирование на действиях.

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