2009-08-28 14 views
4

私はColdFusion of Wheelsのアップロード機能を書いており、完成したら単体テストする必要があります。私が持っている問題は、単体テストで使うことができるColdFusionで模擬マルチパートフォームの投稿を作成する方法がわからないことです。cffile action = uploadが処理する模擬リクエストを作成

私ができることを望みたいのは、アップロードされているファイルをシミュレートして模擬リクエストを作成し、そのファイルを処理して確認することです。

私はonline ColdFusion helpで、cfhttpを使ってそのようなリクエストを作成した例を見ましたが、それは他のページに投稿する必要があります。

答えて

5

偉大な質問rip。それが価値あるものであれば、私はMXUnit(eclipseプラグインを作成しました)に貢献しています。このシナリオは、今年cfobjectiveでテストしやすいコード(http://mxunit.org/doc/zip/marc_esher_cfobjective_2009_designing_for_easy_testability.zip)で行ったプレゼンテーションにありました。

このシナリオでは、アップロードをテストしないことをお勧めします。我々のコードではないものをテストするために時間を費やすべきではないと私は信じています。私たちがバグやその他の奇妙なものを捕まえる可能性は、それが未テストのままにしておくことを正当化するのに十分低いです。私たちは "私たちの"コードをテストするべきだと考えています。

あなたのシナリオでは、1)アップロードと2)アップロード後の動作の2つの動作があります。私はアップロード後の動作をテストしたいと思います。

これで、ファイルのソースを気にしないようにユニットテストが解放されます。どのようにして実際にアップロードロジックが「ファイルとは何か」から切り離されていることに注目してください。論理。結論として言えば、これは少なくともアップロード後のものにこのポストアップロードロジックを再利用する可能性を(理論的に)作り出します。

これにより、単体テスト自体のsetUpのどこかに置かれたファイルに対してテストできるので、テストがずっと簡単になります。

<cfffunction name="uploadAndDoStuff"> 

から

<cffunction name="upload"> 

、その後

<cffunction name="handleUpload"> 

または "handleFile" または "doSomethingWithFile" または "processNetworkFile" またはいくつかの他の事にだからあなたのコンポーネントの変更。ユニットテストでは、upload()をテストしないで、アップロード後のハンドラをテストするだけです。例えば、私が仕事中にこれをやっていたら、「ファイルをアップロードしてファイルをウイルススキャンのためにキューに移動し、イメージやjpgの場合はサムネイルを作成し、データベースに追加するなど」としたら、私はCF1.0(または何でも)以来働いているので、 "アップロードファイル"はすでに動作していることを知っているので、私は孤立してテストしたいと思います。理にかなっている?

さらに、「アップロード」はコンポーネントから完全に離したままにしてください。CFMファイルに保存するのは間違いありません。なぜなら、(私が見る限りでは)それを汎用化しようとする点はあまりないからです。嘲笑に関係するメリットがあるかもしれませんが、それはまったく別の話題です。

1

私は、フォームのアップロードをテストMXUnitためのクイック検索を行なったし、このGoogleグループのスレッドを思い付いた:ピーター・ベルとボブSilverbergの間で議論Testing a file upload

その - ファイルアップロードのテストがあるということであるの結果を実際に単体テストとは対照的に受け入れテストの一部です。

あなたの質問に厳密に答えていないことはわかっていますが、それが役に立ちそうです。

+0

参考にしていただきありがとうございます。これについてもう少し考えなければなりません。 – rip747

0

厳密に言えば、あなたは正しいです。外部リソースへの呼び出しを行うために外出する必要がある場合、何かをテストします(データベース、Webサービス、ファイルアップローダ)。これはユニットテストの目的を無効にします。最も一般的なアドバイスは、外部リソースの動作を模擬して、それらが機能しているとみなしたり、独自の単体テストがカバーしていると想定することです。

Model-Glueフレームワークのコードベースでは、リダイレクトを介した値の永続化、AbstractRemotingService機能の接続など、外部リソースを呼び出す多数のユニットテストがあります。これらは単体テストにとって重要な特徴であると考えられ、ユニットテストの外部依存関係を選択して、良好なカバレッジを確保しました。結局のところ、フレームワークコードでは、受け入れテストはありません。それらはユーザーによって行われ、フレームワークのユーザーは必要なときに完璧なコードを期待しています。

重要な外部リソースをテストし、自動化された機能で処理したい場合は、ユニットテストに追加することができます。理由だけでそこにあるベストプラクティスから逸脱していることを知っています。

ダンウィルソン

関連する問題