如何在php命令行中模拟文件上传

khi*_*ari 6 php phpunit

我是PHPUnit测试框架的新手.

我们知道,move_uploaded_file()在通过http POST方法上传文件之前,PHP的功能不起作用

所以,问题是如何在PHP命令行中模拟这个

注意:使用selenium我们可以模拟webform ..但我需要另一种选择.

dec*_*eze 7

您基本上需要使您的代码更易于测试.将其分解,以便您可以测试通过HTTP分别从其余代码上传文件的简单操作.主要用途move_uploaded_file是提供额外的安全停止,这样您就不会被诱骗移动其他文件,move_uploaded_file只需确保文件是在同一请求中上传然后移动它.您也可以使用rename它来简单地移动文件.因此,请将应用程序分解为具有一个Request表示并封装当前HTTP请求的对象,包括使用它来检查上载的文件is_uploaded_file.一旦验证,您可以使用rename而不是move_uploaded_file.在测试中,您可以模拟Request对象并测试其他代码.

你也可以简单地制作move_uploaded_filemockable,例如:

class Foo {

    public function do() {
        ...
        $this->move_uploaded_file($from, $to);
        ...
    }

    protected function move_uploaded_file($from, $to) {
        return move_uploaded_file($from, $to);
    }

}
Run Code Online (Sandbox Code Playgroud)

例如,在测试中,您可以扩展/模拟类并重写Foo::move_uploaded_file为always return true.