使用Zend Framework进行文件上传和单元测试

使用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超全局。接下来,使用模拟对象进行任何外部类型的服务,否则您不是真正的单元测试,而是集成测试。

我不担心测试上传文件的实际过程。这是网络服务器和语言的领域;重要的是你正确测试你对收到的文件做了什么(或否)。

但是,这一切都取决于如何你现在正在处理你的文件上传。如果您提供了有关如何处理文件上传的更多详细信息,我可能会提供更多建议。

+0

感谢您的指针! 代码没什么特别,控制器动作实例化一个表单,检查请求是否是POST,如果是:对文件做些事情,并将其他字段放入数据库,否则返回带有表单的视图。 通常,ControllerTestCase在测试这类控制器代码方面效果很好,但它没有处理文件的机制。我会试试这个$ _FILES的想法。 我很想看到一个控制器代码测试情况的​​例子,如果有人有一个例子来分享! – user131056 2009-07-01 08:07:39