5

私は現在、主に(T / B)DDの新しい方法を学び、どのテクノロジーを使用するかについて知識に基づいた決定を下せるようにするために、MSpecを把握しようとしています。以前は、ほとんど(読み取り:のみ)Moqで組み込みのMSTestフレームワークを使用していたため、BDDは私にとってまったく新しいものです。

ASP.NET MVCアプリを作成していますが、 PRGを実装したいと考えています。前回これを行ったときは、アクションフィルターを使用してModelStateを介してエクスポートおよびインポートしましTempDataた。これにより、を返すことができRedirectResult、ユーザーがビューを取得したときに検証エラーが引き続き発生します。私は2つのことを検証することによってそのシナリオをテストしました:

a)私が書いたExportModelStateAttributeが適用されたこと(私のコントローラーのテストの中で)
b)属性が機能したこと(アクションフィルター属性のテストの中で)

ただし、BDDでは、動作にもっと関心があり、実装にはもっと関心がないはずだと理解しました。つまり、アクションの実行が終了したときにモデルの状態がtempdataにあることを確認する必要があります。必ずしも、属性を介して実行されているとは限りません。

さらに複雑なことに、テストでアクションを直接呼び出すときに属性が実行されないため、アクションを呼び出してジョブが完了したかどうかを確認することはできません。

MSpecでこれをどのようにスペック/テストする必要がありますか?

4

1 に答える 1

1

フィルタは横断的関心事であるため、適用場所とは関係なくフィルタの動作をテストする必要があります(そうでない場合は、多くのテストを複製します)。

コントローラテストで目的の動作を表現することはできますが(モデルの状態は一時データに保存されます)、テストは属性の存在を表明できます(動作にカプセル化できますか?)。

余談です が、ASP.NET MVCは、モデルの状態にエラーが含まれている場合にビューを返すという規則に従って設計されています。これらのシナリオでPRGを使用することは、PRGが重複するフォームの送信と処理(つまり、有効な要求)を停止するように設計されているため、意味があります。ユーザーが無効なフォームを投稿すると、リクエストの処理を開始する前にエラーをチェックするため、ユーザーのリクエストの処理が停止します。

于 2010-05-31T01:55:07.647 に答える