2009-06-30 83 views
2

如何使用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進行文件上傳。這並不會讓我感到非常優雅。

其他人不得不處理這個問題?

謝謝!

回答

6

我建議看一下Zend_File_Transfer組件中的unit tests。他們將能夠提供一些見解。

基本上,您可以在單元測試的setUp()中直接操縱$_FILES超全局。接下來,使用模擬對象進行任何外部類型的服務,否則您不是真正的單元測試,而是集成測試。

我不擔心測試上傳文件的實際過程。這是網絡服務器和語言的領域;重要的是你正確測試你對收到的文件做了什麼(或否)。

但是,這一切都取決於如何你現在正在處理你的文件上傳。如果您提供了有關如何處理文件上傳的更多詳細信息,我可能會提供更多建議。

+0

感謝您的指針! 代碼沒什麼特別,控制器動作實例化一個表單,檢查請求是否是POST,如果是:對文件做些事情,並將其他字段放入數據庫,否則返回帶有表單的視圖。 通常,ControllerTestCase在測試這類控制器代碼方面效果很好,但它沒有處理文件的機制。我會試試這個$ _FILES的想法。 我很想看到一個控制器代碼測試情況的​​例子,如果有人有一個例子來分享! – user131056 2009-07-01 08:07:39