[英]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.