如何使用phpunit测试一个函数,其中输入参数是从$ _POST中提取的

时间:2010-09-12 12:12:32

标签: phpunit

我已经坚持了一段时间

我必须测试一个从$ _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 个答案:

答案 0 :(得分:1)

从技术上讲,在调用getUsers()之前,没有什么能阻止你在测试代码中更改$ _POST。它只是一个阵列。 $ _POST ['orgType'] =有效的东西。

您可能还想启用backupGlobals,如下所述:www.phpunit.de

答案 1 :(得分:1)

您提供的代码非常多,所以很难测试。

  1. 您无法在方法
  2. 之外操纵(例如假冒,模拟)$ _POST值
  3. 您可以通过extract
  4. 设置任何变量
  5. 您将未经验证的数据传递给SQL查询(SQL注入)
  6. 更好的方法是:

    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);
         ...
    }