如何使用phpunit测试函数,其中输入参数是从$\u POST提取的

如何使用phpunit测试函数,其中输入参数是从$\u POST提取的,phpunit,Phpunit,我在某一点上坚持了很长时间 我必须测试一个函数,其中参数是从$\u POST全局数组中提取的 请参阅以下内容以获得更好的说明 我的函数如下所示 function getUsers() { extract($_POST); $usersQry=$this->db->query("select user from user_table where org_type='".$orgType."'") return $user

我在某一点上坚持了很长时间

我必须测试一个函数,其中参数是从$\u POST全局数组中提取的

请参阅以下内容以获得更好的说明

我的函数如下所示

function getUsers()
       {

           extract($_POST);
       $usersQry=$this->db->query("select user from user_table where org_type='".$orgType."'")
       return $usersQry;
}
在上面的中,$orgType是$\u POST数组中的索引

由于没有向函数getuser()传递参数,因此我无法从测试文件中以数组形式传递参数。请参见下文

 $testdata=$this->users_model->getUsers($orgType);// i can not go for this option in test file
请发布一些备选方案,帮助我摆脱这个困境


谢谢。

从技术上讲,在调用getUsers()之前,没有什么可以阻止您更改测试代码中的$\u POST。它只是一个数组$_POST['orgType']=有些东西可以用


您可能还希望启用backupGlobals,如下所述:

您提供的代码有很多错误,因此很难进行测试

  • 您无法在方法之外操纵(例如,伪造、模拟)$\u POST值
  • 您可以通过
    extract
  • 将未验证的数据传递给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);
         ...
    }
    

    为什么不能将参数传递给getUsers呢?@Anti建议的内容比从类中的
    $\u POST
    获取内容要干净得多。如果可能的话,考虑一下改变程序的结构,我已经提到过,我不能将参数从测试文件传递给GETUSER()。即使是我也不能改变程序的结构,因为我没有编写代码。因此,一些替代方案将很方便。