PHPでファイルアップロードのテストを作成するにはどうすればよいですか?
-
25-09-2019 - |
質問
Simpletestを使用してPHPテストを作成しています。私はファイルアップロードプラグインを書いており、どのようにテストするのか疑問に思っていました。
ファイルが正しいフォルダーに正しくアップロードされていること、必要に応じてそのエラーが正しく返されるなどを確認したいと思います。
($ _Files変数を介して)ファイルのアップロードをエミュレートするにはどうすればよいですか?私が知っておくべき問題はありますか?
解決
別のソリューションを見つけました。私はスプーフィングしました $_FILES
テストデータを備えた配列、でダミーテストファイルを作成しました tmp/
フォルダー(フォルダーは無関係ですが、デフォルトに固執しようとしました)。
問題はそれでした is_uploaded_file
と move_uploaded_file
このスプーフィングされたアイテムは、実際にアップロードされていないため、動作できませんでした POST
。私が最初にしたことは、それらの機能を自分の機能に包むことでした moveUploadedFile
と isUploadedFile
私のプラグインでは、それらをock笑して戻り値を変更できます。
最後のことは、クラスをテストして上書きするときにクラスを拡張することでした 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
最初のものとしての配列。 aを作成します FileRequest
あなたが合格できるクラス $_FILES
アレイへ。次に、クラスからアップロードを処理できます。これにより、実際にファイルをアップロードせずに機能をテストできます。それに応じて、Fileerequestインスタンスをセットアップするだけです。ファイルシステムをock笑することもできます VFSSTREAMWRAPPER, 、したがって、実際のファイルさえ必要ありません。
たとえば、プログラム的な方法でファイルアップロードを生成できます カール 拡大。
これにはWebサーバーの下でPHPが実行される必要があるため、単体テストではありません。したがって、最良の方法は、PHPTテストを使用して、 --POST_RAW--
セクション データで。
何を入れるべきかわからない場合 --POST_RAW--
, 、TamperData Firefox拡張機能をインストールし、Firefoxからファイルの提出を行い、右側からデータをコピーしてください。
(機能テストとは対照的に)ユニットテストについては、ファイル(短いテキストファイル)をテストページにアップロードしてみてください。 var_dump($_FILES)
と var_dump($_POST)
. 。次に、それら(またはあなたの模擬)をどのように入力するかを知っています。