PHPでファイルアップロードのテストを作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3402765

質問

Simpletestを使用してPHPテストを作成しています。私はファイルアップロードプラグインを書いており、どのようにテストするのか疑問に思っていました。

ファイルが正しいフォルダーに正しくアップロードされていること、必要に応じてそのエラーが正しく返されるなどを確認したいと思います。

($ _Files変数を介して)ファイルのアップロードをエミュレートするにはどうすればよいですか?私が知っておくべき問題はありますか?

役に立ちましたか?

解決

別のソリューションを見つけました。私はスプーフィングしました $_FILES テストデータを備えた配列、でダミーテストファイルを作成しました tmp/ フォルダー(フォルダーは無関係ですが、デフォルトに固執しようとしました)。

問題はそれでした is_uploaded_filemove_uploaded_file このスプーフィングされたアイテムは、実際にアップロードされていないため、動作できませんでした POST。私が最初にしたことは、それらの機能を自分の機能に包むことでした moveUploadedFileisUploadedFile 私のプラグインでは、それらをock笑して戻り値を変更できます。

最後のことは、クラスをテストして上書きするときにクラスを拡張することでした 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 最初のものとしての配列。 aを作成します FileRequest あなたが合格できるクラス $_FILES アレイへ。次に、クラスからアップロードを処理できます。これにより、実際にファイルをアップロードせずに機能をテストできます。それに応じて、Fileerequestインスタンスをセットアップするだけです。ファイルシステムをock笑することもできます VFSSTREAMWRAPPER, 、したがって、実際のファイルさえ必要ありません。

たとえば、プログラム的な方法でファイルアップロードを生成できます カール 拡大。

これにはWebサーバーの下でPHPが実行される必要があるため、単体テストではありません。したがって、最良の方法は、PHPTテストを使用して、 --POST_RAW-- セクション データで。

何を入れるべきかわからない場合 --POST_RAW--, 、TamperData Firefox拡張機能をインストールし、Firefoxからファイルの提出を行い、右側からデータをコピーしてください。

(機能テストとは対照的に)ユニットテストについては、ファイル(短いテキストファイル)をテストページにアップロードしてみてください。 var_dump($_FILES)var_dump($_POST). 。次に、それら(またはあなたの模擬)をどのように入力するかを知っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top