首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中为文件上传编写测试?

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

Stack Overflow用户
提问于 2010-08-04 13:10:37
回答 4查看 11.5K关注 0票数 16

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-05 07:34:09

我找到了另一个解决方案。我用测试数据欺骗了$_FILES数组,在tmp/文件夹中创建了虚拟测试文件(该文件夹与我无关,但我尝试使用默认文件夹)。

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

最后一件事是在测试类时扩展它,并重写moveUploadedFile以使用rename而不是move_uploaded_file,使用isUploadedFile来使用file_exists而不是is_uploaded_file

票数 28
EN

Stack Overflow用户

发布于 2010-08-04 15:28:59

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

代码语言:javascript
复制
File upload testing     Can simulate the input type file tag    1.0.1

我已经在他们的网站上看过这些例子,并假设您会使用类似以下内容的内容

代码语言:javascript
复制
$this->get('http://www.example.com/');
$this->setField('filename', 'local path');
$this->click('Go');

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

但从根本上说,表单上传文件的用法测试并不多。这是经过试验和测试的浏览器行为。测试处理上传的代码更有意义。我不知道您是如何实现FileUpload代码的,但是如果我必须实现它,我会首先摆脱对$_FILES数组的依赖。创建一个可以向其传递$_FILES数组的FileRequest类。然后你就可以处理来自类的上传了。这将允许您在不实际上传文件的情况下测试功能。只需相应地设置您的FileRequest实例。您甚至可以用vfsStreamWrapper模拟文件系统,因此您甚至不需要实际的文件。

票数 9
EN

Stack Overflow用户

发布于 2010-08-04 13:19:48

您可以使用curl扩展名以编程方式生成文件上传。

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

如果您不知道要在--POST_RAW--中放入什么内容,请尝试安装TamperData Firefox扩展,从Firefox提交文件,然后从右侧复制粘贴数据。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3402765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档