使用Zend Framework进行文件上传和单元测试
问题描述:
如何使用Zend_Test_PHPUnit_ControllerTestCase
最好地测试接收文件上传的控制器操作?使用Zend Framework进行文件上传和单元测试
理想情况下,$this->getRequest()->setPost()
会在数据数组中使用一个文件名,但这似乎不被支持。
我会在这个阶段愿意在命令行上引导/运行我的应用程序,并创建一个请求对象传递给前端控制器。这将绕过Zend_Test_PHPUnit_ControllerTestCase
,但我随后可以通过ControllerTestCase中的后续$this->dispatch('/some/url')
检查文件是否已正确上载。但是,我也很难理解如何使用这种方法将文件导入请求对象。
我现在唯一能想到的就是通过指向应用程序的命令行(APPLICATION_ENV='testing'
)启动一个HTTP服务器,并通过Zend的Http客户端或CURL进行文件上传。这并不会让我感到非常优雅。
其他人不得不处理这个问题?
谢谢!
答
我建议看一下Zend_File_Transfer
组件中的unit tests。他们将能够提供一些见解。
基本上,您可以在单元测试的setUp()
中直接操纵$_FILES
超全局。接下来,使用模拟对象进行任何外部类型的服务,否则您不是真正的单元测试,而是集成测试。
我不担心测试上传文件的实际过程。这是网络服务器和语言的领域;重要的是你正确测试你对收到的文件做了什么(或否)。
但是,这一切都取决于如何你现在正在处理你的文件上传。如果您提供了有关如何处理文件上传的更多详细信息,我可能会提供更多建议。
感谢您的指针! 代码没什么特别,控制器动作实例化一个表单,检查请求是否是POST,如果是:对文件做些事情,并将其他字段放入数据库,否则返回带有表单的视图。 通常,ControllerTestCase在测试这类控制器代码方面效果很好,但它没有处理文件的机制。我会试试这个$ _FILES的想法。 我很想看到一个控制器代码测试情况的例子,如果有人有一个例子来分享! – user131056 2009-07-01 08:07:39