[英]How can I write tests for file upload in PHP?
我正在使用simpleTest来编写我的PHP测试。 我正在写一个文件上传插件,并想知道我是如何测试它的。
我想检查文件是否正确上传,在正确的文件夹中,在需要时正确返回错误等。
如何模拟文件上传(通过$ _FILES变量)? 我应该注意哪些问题?
我找到了另一种解决方案。 我用测试数据欺骗了$_FILES
数组,在tmp/
文件夹中创建了虚拟测试文件(该文件夹无关紧要,但我试图坚持使用默认值)。
问题是is_uploaded_file
和move_uploaded_file
无法使用这个欺骗项目,因为它们并没有真正通过POST
上传。 我做的第一件事就是在我的插件moveUploadedFile
这些函数包装在我自己的moveUploadedFile
和isUploadedFile
中,这样我就可以模拟它们并改变它们的返回值。
最后一件事是在测试它时扩展类并覆盖moveUploadedFile
以使用rename
而不是move_uploaded_file
和isUploadedFile
来使用file_exists
而不是is_uploaded_file
。
根据文档, 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代码的,但是如果我必须实现这个,我将首先摆脱对$_FILES
数组的依赖。 创建一个FileRequest
类,您可以将$_FILES
数组传递给。 然后,您可以处理从班级上传。 这将允许您在不实际上载文件的情况下测试功能。 只需相应地设置您的FileRequest实例。 你甚至可以用vfsStreamWrapper模拟文件系统,所以你甚至不需要实际的文件。
您可以使用例如卷曲扩展以编程方式生成文件上载。
由于这需要在Web服务器下运行PHP,因此它不是一个单元测试。 因此,最好的方法是使用PHPT测试并用数据填充--POST_RAW--
部分 。
如果你不知道放在--POST_RAW--
中的--POST_RAW--
,请尝试安装TamperData Firefox扩展,从Firefox提交文件,然后从右侧复制粘贴数据。
对于单元测试(与功能测试相反),尝试将文件(短文本文件)上传到测试页面,并将var_dump($_FILES)
和var_dump($_POST)
上传。 然后你知道用它们填充它们(或你的模拟物)的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.