phpunit - php命令行模拟文件上传的方法

标签 phpunit php

我是 PHPUnit 测试框架的新手。

我们知道 PHP 的 move_uploaded_file() 函数在通过 http POST 方法上传文件之前不会工作

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

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

最佳答案

您基本上需要让您的代码更易于测试。将其分解,以便您可以独立于其余代码测试通过 HTTP 上传文件这一简单行为。 move_uploaded_file 的主要用途是设置一个额外的安全站点,这样您就不会被骗去移动其他文件,move_uploaded_file 只是确保文件是在同一时间上传的请求然后移动它。您也可以使用 rename 简单地移动文件。因此,将您的应用程序分解为一个 Request 对象,它表示并封装当前的 HTTP 请求,包括使用 is_uploaded_file 检查上传的文件。验证通过后,您可以使用 rename 而不是 move_uploaded_file。在您的测试中,您可以模拟 Request 对象并测试您的其他代码。

您也可以简单地使 move_uploaded_file 可模拟,例如:

class Foo {

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

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

}

例如,在您的测试中,您可以扩展/模拟该类并覆盖 Foo::move_uploaded_file 以始终返回 true

关于phpunit - php命令行模拟文件上传的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564069/

相关文章:

PHPUnit : memcache_connect not working in PHPunit test case

php - 如何在方法中模拟新对象 - phpunit

Laravel 5.5 测试 - 调用未定义的方法::see()

php - 如何检查 Doctrine 实体是否持久化并刷新到数据库?

php - 在 PHPUnit (CIUnit) 中使用 YAML 文件作为数据提供者

php - 使 javascript 适应表单

php - 用 PHP 解析 XML?

php - Memcached奇怪的问题!

javascript - 如何用JS代码加载php文件

php - 创建新服务时 Symfony 2 InvalidArgumentException