2010-12-09 10 views
4

はここでコントローラのアクションの一部だときに検証されていません:if文がさえ呼ばれる前にモデルは、自動的にユニットテスト

[HttpPost] 
public ActionResult NewComplaint(Complaint complaint) 
{ 
    if(!ModelState.IsValid) 
    { 
     // some code 
    } 
    // some more code... 
} 

アプリケーションを実行して、モデルが自動的に検証されます。ただし、このコードを単体テストしようとすると、自動検証は行われません。

FormCollectionを使用して、代わりにTryUpdateModelを呼び出す場合、検証は行われますが、私はそれを使用したくありません。

私は、if文の前にTryValidateModel(model)を呼び出すと問題がうまく回避されることがわかりました。追加のコード行が1つだけ必要です。私はむしろそれを取り除くだろう。

ユニットテスト時に自動検証は行われませんが、アプリケーションの実行中に発生する理由はありますか?

編集:私はASP.NET MVC3 RC1を使用していますし、それが結合モデル中

答えて

4

検証が発生した任意の違い(およびTryUpdateModelが結合モデルを実行する場合、私は、コントローラのHttpContextオブジェクトをからかってる、言及するのを忘れました)。

しかし、私が問題と思うのは、MVCフレームワーク(つまり、アクションメソッドが呼び出される前に検証が行われるという事実)です。あなたはそれをテストすべきではありません。

私たちは広範にテストしているため、その部分は動作していることを前提とし、アプリケーションコードのみをテストしてください。したがって、この場合には、あなたがモックする必要がある唯一のものはModelState.IsValidの戻り値であり、手動で検証エラーを追加することによってそれを行うことができます。

ModelState.AddModelError("some key", "some error message") 
+0

男は、今私は愚かな感じ。ちょうどそれをやったのか、それを嘲笑したのですか?私のテストでは、モックを介してModelStateを設定するのではなく、検証に合格するために必要なすべてのプロパティ/エントリを持つobject/formCollectionを作成します。 – xTRUMANx

+7

marcind、私はフレームワークがほとんどの単体テストの範囲外であることを確認します。ただし、テストでは、正しいデータ注釈が指定されているかどうかを示す必要があります。 – wilk

関連する問題