代码之家  ›  专栏  ›  技术社区  ›  pixelastic

如何用PHP编写文件上传测试?

  •  16
  • pixelastic  · 技术社区  · 16 年前

    我正在使用simpleTest来编写PHP测试。我正在写一个文件上传插件,想知道我可能会如何测试它。

    我想检查文件是否正确上传,在正确的文件夹中,错误是否在需要时正确返回,等等。

    如何模拟文件上载(通过$\u FILES变量)?有什么我应该注意的问题吗?

    4 回复  |  直到 16 年前
        1
  •  28
  •   pixelastic    16 年前

    $_FILES 数组中创建虚拟测试文件 tmp/ 文件夹(文件夹是不相关的,但我试图坚持默认)。

    is_uploaded_file 和 move_uploaded_file 无法处理此欺骗项目,因为它们不是通过 POST . 我做的第一件事就是将这些函数包装到我自己的函数中 moveUploadedFile 和 isUploadedFile 在我的插件中,这样我就可以模拟它们并更改它们的返回值。

    移动上载文件 使用 rename 移动\u上载的\u文件 已上载文件 使用 file_exists 是否上载了\u文件

        2
  •  9
  •   Gordon Haim Evgi    16 年前

    根据文件, SimpleTest has support for FileUpload testing baked in since version 1.0.1:

    File upload testing     Can simulate the input type file tag    1.0.1
    

    我已经看过他们网站上的例子,并假设你会使用一些类似于

    $this->get('http://www.example.com/');
    $this->setField('filename', 'local path');
    $this->click('Go');
    

    提交文件,然后使用常规断言检查上传是否正常工作。但这只是一个猜测,因为我不熟悉SimpleTest,在他们的主页上也找不到一个例子。你可能想 ask in their support forum though.

    但基本上,测试表单上载文件并没有多大用处。这是久经考验的浏览器行为。测试处理上传的代码更有意义。我不知道你是如何实现你的FileUpload代码的,但是如果我必须实现这个,我会摆脱对 $_FILES FileRequest 你可以通过 数组到。然后您可以处理来自类的上传。这将允许您在不实际上载文件的情况下测试功能。只需相应地设置FileRequest实例。你甚至可以用 vfsStreamWrapper ,所以你甚至不需要实际的文件。

        3
  •  5
  •   Artefacto    16 年前

    您可以通过编程方式生成文件上载,例如 curl 分机。

    因为这需要在web服务器下运行PHP,所以不需要太多的单元测试。因此,最好的方法是使用PHPT测试并填充 --POST_RAW-- section 用数据。

    如果你不知道该放什么进去 --后置生的-- ,尝试安装TamperData Firefox扩展,从Firefox提交文件,并从右侧复制粘贴数据。

        4
  •  -3
  •   Nathan MacInnes    16 年前

    var_dump($_FILES) 和 var_dump($_POST)