簡體   English   中英

如何在PHP中編寫文件上傳測試?

[英]How can I write tests for file upload in PHP?

我正在使用simpleTest來編寫我的PHP測試。 我正在寫一個文件上傳插件,並想知道我是如何測試它的。

我想檢查文件是否正確上傳,在正確的文件夾中,在需要時正確返回錯誤等。

如何模擬文件上傳(通過$ _FILES變量)? 我應該注意哪些問題?

我找到了另一種解決方案。 我用測試數據欺騙了$_FILES數組,在tmp/文件夾中創建了虛擬測試文件(該文件夾無關緊要,但我試圖堅持使用默認值)。

問題是is_uploaded_filemove_uploaded_file無法使用這個欺騙項目,因為它們並沒有真正通過POST上傳。 我做的第一件事就是在我的插件moveUploadedFile這些函數包裝在我自己的moveUploadedFileisUploadedFile中,這樣我就可以模擬它們並改變它們的返回值。

最后一件事是在測試它時擴展類並覆蓋moveUploadedFile以使用rename而不是move_uploaded_fileisUploadedFile來使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM