16

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

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

($_FILES 変数を使用して) ファイルのアップロードをエミュレートするにはどうすればよいですか? 注意すべき問題はありますか?

4

4 に答える 4

28

別の解決策を見つけました。テストデータで配列を偽装し、フォルダー$_FILESにダミーのテストファイルを作成しましたtmp/(フォルダーは関係ありませんが、デフォルトのままにしてみました)。

問題は、実際には を介し​​てアップロードされis_uploaded_filemove_uploaded_fileいないため、このスプーフィングされたアイテムで と が機能しないことでしPOSTた。moveUploadedFile私が最初にしたことは、これらの関数を自分自身とプラグイン内にラップisUploadedFileして、それらをモックして戻り値を変更できるようにすることでした。

最後に、クラスをテストするときにクラスを拡張し、代わりmoveUploadedFileに使用するように上書きし、rename代わりにmove_uploaded_file使用isUploadedFileするfile_existsようにしis_uploaded_fileました。

于 2010-08-04T23:34:08.653 に答える
9

ドキュメントによると、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を使用してファイルシステムをモックすることもできるため、実際のファイルは必要ありません。

于 2010-08-04T07:28:58.513 に答える
5

カール拡張子などを使用して、プログラムでファイルアップロードを生成できます。

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

何を入れるべきかわからない場合は--POST_RAW--、TamperData Firefox拡張機能をインストールし、Firefoxからファイルを送信して、右側からデータをコピーして貼り付けてみてください。

于 2010-08-04T05:19:47.657 に答える
-3

(機能テストではなく) 単体テストの場合は、ファイル (短いテキスト ファイル) をテスト ページにアップロードしてみてvar_dump($_FILES)くださいvar_dump($_POST)。次に、それら(またはモック)に何を入力するかがわかります。

于 2010-10-28T10:21:40.707 に答える