我正在使用simpleTest編寫我的PHP測試。我正在寫一個文件上傳插件,並想知道我可能會如何測試它。如何在PHP中編寫文件上傳測試?
我想檢查文件正確上傳,在正確的文件夾,在需要時正確地返回錯誤等
如何模擬文件上傳(通過$ _FILES變量)?我應該注意哪些問題?
我正在使用simpleTest編寫我的PHP測試。我正在寫一個文件上傳插件,並想知道我可能會如何測試它。如何在PHP中編寫文件上傳測試?
我想檢查文件正確上傳,在正確的文件夾,在需要時正確地返回錯誤等
如何模擬文件上傳(通過$ _FILES變量)?我應該注意哪些問題?
我找到了一個替代解決方案。我使用測試數據欺騙了$_FILES
陣列,在tmp/
文件夾中創建了虛擬測試文件(該文件夾無關緊要,但我試圖堅持使用默認設置)。
問題是is_uploaded_file
和move_uploaded_file
無法與這個欺騙項目一起工作,因爲它們並沒有通過POST
真正上傳。 我做的第一件事就是將這些函數包裝在我自己的插件moveUploadedFile
和isUploadedFile
中,這樣我就可以嘲笑它們並更改它們的返回值。
的最後一件事是測試它和覆蓋moveUploadedFile
使用rename
而不是move_uploaded_file
和isUploadedFile
使用file_exists
,而不是is_uploaded_file
時擴展的類。
您可以通過編程方式生成文件上傳,例如,擴展名爲curl。
由於這需要PHP在Web服務器下運行,所以它不是什麼單元測試。因此,最好的方法是使用PHPT測試並用數據填充--POST_RAW--
section。
如果您不知道如何放入--POST_RAW--
,請嘗試安裝TamperData Firefox擴展,從Firefox執行文件提交,然後從右側複製粘貼數據。
正如你所說,cURL對於單元測試並不是很好。我閱讀了PHPT文檔,我認爲這可能是更好的解決方案。不幸的是我沒有設法得到它的工作...我終於找到了其他解決方案(請參閱我的答案) – pixelastic 2010-08-04 23:28:05
我也嘗試使用PHPT和--POST_RAW--但無法讓它工作,如記錄在這裏: http://stackoverflow.com/questions/4974727/phpt-unable-to-run-sample-tests-that-use-post-raw – Ian 2011-02-12 04:27:44
根據該文件,SimpleTest has support for FileUpload testing baked in since version 1.0.1:
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,我無法在他們的主頁上找到一個例子。你可能想要ask in their support forum though.
但基本上,沒有太多的使用測試表單上傳文件。這是經過驗證的瀏覽器行爲。測試處理上傳的代碼更有意義。我不知道你是如何實現你的FileUpload代碼的,但是如果我必須實現這個,我會擺脫$_FILES
數組的依賴關係作爲第一件事。創建一個FileRequest
類,您可以將$_FILES
數組傳遞給。然後,您可以處理該課程的上傳。這將允許您在不實際上傳文件的情況下測試功能。只需相應地設置您的FileRequest實例即可。你甚至可以用vfsStreamWrapper來模擬文件系統,所以你甚至不需要實際的文件。
我想只能測試我的插件的一小部分。做一個完整的獲取請求不會讓我達到我需要的詳細程度。 – pixelastic 2010-08-04 23:28:41
對於單元測試(與功能測試相對),嘗試將文件(短文本文件)上傳到測試頁面,然後嘗試上傳var_dump($_FILES)
和var_dump($_POST)
。然後你知道用什麼來填充他們(或你的嘲笑)。
is_uploaded_file將仍然失敗 – 2012-01-28 20:39:09
你能顯示一段代碼嗎? – Jhn 2014-09-19 06:13:24
擴展此答案以及如何模擬move_uploaded_file中文件的移動會非常有幫助。 – 2014-12-01 09:55:47
@pixelastic你有可能向我們展示你的代碼嗎? – Magiranu 2017-11-18 17:17:21