2016-08-14 13 views
3

リクエスト(本体POST経由)と一緒に渡されたファイルを特定のパスweb/imagesの下にコピーしているコントローラがあります。パスは、特定のControllerに属するプロパティによって指定されます。ファンクションテストでファイルコピーを模擬する方法

私は何をしたいことは機能テストでそれをテストしているが、私はそれは私のプロジェクト内のファイルを上書きしたくないので、私のテストケースを送信する前に私がvfsを使用するか、パスを変更したいですリクエスト。

これを行うには良い方法がありますか?

+0

* "私のプロジェクトのファイルを上書きするのは気に入らない" * - これは間違っているように聞こえる。この目的のためだけに使用されるディレクトリ(最初は空)にコードが書き込まれていることを確認してください。そして、あなたは本番環境でテストを実行しませんか?最後に、もしあなたが* "義務がファイルをコピーしているコントローラ"をテストしたいのであれば、*私はファイルシステムを嘲笑せず、実際のものを使う方が良いと思います。それ以外の場合は、何をテストしますか?モックの行動? – axiac

+0

これは部分的に真です。テストする必要があるかどうかは、テストする必要があるかどうかによって決まります。私たちの考え方を変えてみましょう:) コントローラの義務が特定のパスに置かれたファイルを上書きし、gitが元のデフォルトファイルをトレースする場合、私はテストしたいです*コントローラーは、指定されたパスに従ってファイル*を置き換えますが、私は親愛なる古いオリジナルのデフォルトのファイルに触れないようにします。欠落しているのは、テスト環境と品質環境でテストできる元のパスです。しかし、TDDの開発では、このテストはOK以上の可能性があると思います。私はとにかく動作をテストしています – Bertuz

答えて

0

の一つであることがあなたの「WEB_IMAGE_UPLOAD_PATH」を設定することができるかもしれ信じている:私はその性質を持つために私のコードをリファクタリングファイルをコピー/上書きしたいパスを指定します。

次に、PHPUnitクラス内で、オブジェクトプロパティの値をvfsStreamパスに置き換えます。このようにすることで、私の実際のファイルやパスに触れることなく、必要な動作を得ることができます。すべてが仮想ファイルシステム内に存在し、オブジェクトはそれを使用します。

パラメータは、クリーンで再利用可能なコードにとって重要ですが、単体テストしたいときにはさらに重要です。ユニットテストは、再テストの代わりにすべてをパラメータ化することを強制しますたくさんの時間。ユニットテストの作成を手助けするために、メソッドやプロパティにアクセスするクラスを作成しました。

PHPUnitUtils

私はより洗練された何かがすでにありますかなり確信しているが、このクラスは、この瞬間に私のニーズをfullfills。希望する:-)

0

一般的なアプローチは、環境変数として環境間で変化する構成を読み込むことです。 (私がこれまでにsymfonyを使用していないので、ENVはvarsのを支援するためのツールがあるかもしれません)

アップロードパスは、その後、これはあなたが一時(/tmp?)ディレクトリを指定することができます

$upload_path = getenv('WEB_IMAGE_UPLOAD_PATH') ? 
    getenv('WEB_IMAGE_UPLOAD_PATH') : 'web/images' 

可能性があり統合モードでサーバーを始動するとき。


ああ涼しい、(免責事項:私はPHPの人ではないですが)、PHPは機能テストに役立つ、と簡単にクリーンアップを可能にすることができるかもしれIOストリームを持っているように見えます。

http://php.net/manual/en/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-unknown-unknown-descriptios

私はあなたが私は自分自身にお答えしようとするでしょうそれらのストリーム

+0

あなたのアドバイスをいただきありがとうございます!最後に自分の道を見つけ、それを専用の回答で文書化しました。ここでコメントしてください – Bertuz