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

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

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

如何模拟文件上传(通过 $_FILES 变量)?是否有任何我应该注意的问题?


答案 1

我找到了另一种解决方案。我用测试数据欺骗了数组,在文件夹中创建了虚拟测试文件(该文件夹无关紧要,但我试图坚持使用默认值)。$_FILEStmp/

问题是,并且无法使用此欺骗性项目,因为它们不是真正通过 上传的。我做的第一件事是将这些函数包装在我自己的插件中,这样我就可以模拟它们并更改它们的返回值。is_uploaded_filemove_uploaded_filePOSTmoveUploadedFileisUploadedFile

最后一件事是在测试类时扩展该类,并覆盖以使用而不是使用,以及使用而不是。moveUploadedFilerenamemove_uploaded_fileisUploadedFilefile_existsis_uploaded_file


答案 2

根据文档,SimpleTest自1.0.1版本以来一直支持FileUpload测试:

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,我无法在他们的主页上找到一个例子。不过,您可能想在他们的支持论坛中提问。

但基本上,表单上传文件没有太多用途测试。这是经过尝试和测试的浏览器行为。测试处理上载的代码更有意义。我不知道你是如何实现FileUpload代码的,但是如果我必须实现这个,我会把对数组的依赖性作为第一件事。创建一个可以将数组传递到的类。然后,您可以处理来自类的上传。这将允许您在不实际上传文件的情况下测试功能。只需相应地设置您的 FileRequest 实例即可。您甚至可以使用vfsStreamWrapper模拟文件系统,因此您甚至不需要实际文件。$_FILESFileRequest$_FILES


推荐