Как протестировать функцию с phpunit, где входные параметры извлекаются из $ _POST - PullRequest
0 голосов
/ 12 сентября 2010

Я застрял в точке довольно долгое время

Мне нужно протестировать функцию, в которой параметры извлекаются из глобального массива $ _POST.

посмотрите на следующее для лучшего разъяснения

моя функция выглядит так

function getUsers()
       {

           extract($_POST);
       $usersQry=$this->db->query("select user from user_table where org_type='".$orgType."'")
       return $usersQry;
}

в указанном выше $ orgType - это индекс в массиве $ _POST.

поскольку параметр не передается в функцию getuser () я не могу передать параметры в виде массива из тестового файла. См. Ниже

 $testdata=$this->users_model->getUsers($orgType);// i can not go for this option in test file

пожалуйста, опубликуйте несколько альтернатив и помогите мне выбраться из этого момента.

спасибо.

Ответы [ 2 ]

1 голос
/ 12 сентября 2010

Код, который вы указали, довольно глючный, поэтому его сложно протестировать.

  1. Вы не можете манипулировать (например, подделкой, фиктивно) значениями $ _POST вне метода
  2. Вы можете установить любую переменную с помощью extract
  3. Вы передаете непроверенные данные в SQL-запрос (SQL-инъекция)

Лучше подход будет:

function getUsers($post = null) 
{
    if (null === $post) {
         $post = $this->getSanitizedPost();
    }

    if (isset($post['orgType']) {
         throw new Exception('Missing required parameter…');
    }

    $orgType = $post['orgType'];
    $usersQry = $this->db->query("select user from user_table where org_type='".$orgType."'");

    return $usersQry;
}
/**
 * Assert exception…
 */
function testHasRequiredParamter() 
{
     $post = array('param1'=>'val1');
     $users = $this->tested->getUsers($post);
     ...
}
1 голос
/ 12 сентября 2010

Технически ничто не мешает вам изменить $ _POST внутри вашего тестового кода перед вызовом getUsers ().Это просто массив.$ _POST ['orgType'] = что-то будет работать.

Вы также можете включить backupGlobals, как описано здесь: www.phpunit.de

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