PHP テストを作成するために simpleTest を使用しています。私はファイルアップロードプラグインを書いていますが、それをどのようにテストしているのか疑問に思っていました.
ファイルが適切なフォルダーに正しくアップロードされていること、必要に応じてエラーが正しく返されていることなどを確認したいと思います。
($_FILES 変数を使用して) ファイルのアップロードをエミュレートするにはどうすればよいですか? 注意すべき問題はありますか?
PHP テストを作成するために simpleTest を使用しています。私はファイルアップロードプラグインを書いていますが、それをどのようにテストしているのか疑問に思っていました.
ファイルが適切なフォルダーに正しくアップロードされていること、必要に応じてエラーが正しく返されていることなどを確認したいと思います。
($_FILES 変数を使用して) ファイルのアップロードをエミュレートするにはどうすればよいですか? 注意すべき問題はありますか?
別の解決策を見つけました。テストデータで配列を偽装し、フォルダー$_FILES
にダミーのテストファイルを作成しましたtmp/
(フォルダーは関係ありませんが、デフォルトのままにしてみました)。
問題は、実際には を介してアップロードされis_uploaded_file
てmove_uploaded_file
いないため、このスプーフィングされたアイテムで と が機能しないことでしPOST
た。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--
、TamperData Firefox拡張機能をインストールし、Firefoxからファイルを送信して、右側からデータをコピーして貼り付けてみてください。
(機能テストではなく) 単体テストの場合は、ファイル (短いテキスト ファイル) をテスト ページにアップロードしてみてvar_dump($_FILES)
くださいvar_dump($_POST)
。次に、それら(またはモック)に何を入力するかがわかります。