質問

私のアプリケーションでは、私は私がのglobal.asaxにDefaultBinderに設定したカスタムモデルバインダーを持っています:

 ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();
コントローラのユニットテストを書くときに

私は、コントローラは、カスタムモデルバインダーを使用していますが、私はこれを行う方法を知らないことを確認する必要があります。

私のテストでは、次のようになります:

 [Test]
 public void Details_Post_Action_Fails_To_Change_Email_Address_With_Duplicate()
 {
     // Setup
     var controller = new AccountController();
     controller.SetFakeControllerContext();

     var param = Customer.Load(30005);
     param.EmailAddress = "foo@bar.com";

     // Test
     var result = controller.Details(param);

     // Assert
     Assert.IsTrue(result is ViewResult);  // will be ViewResult if failed....
     Assert.IsFalse(((ViewResult)result).ViewData.ModelState.IsValid);
 }

このユニットテストを持つコントローラはDefaultModelBinderを使用してしまいます。私は、コントローラを確保するために、このテストで追加することができ、カスタムモデルバインダーを使用しています!

役に立ちましたか?

解決

スコットHanselman氏は、しばらく前にこれに関連するブログ記事を作っます:

分割のDateTime - ユニットテストのASP.NET MVCのカスタムモデルバインダー

あなたが興味しまう部分が「カスタムモデルバインダーのテスト」の下のポストの一番下にあります。基本的に、あなたは、あなたのModelbinderをインスタンス化し、(必要な場合や、コントローラコンテキスト)に作成したModelBindingContextに渡し、あなたのModelbinderにバインド()を呼び出し、ModelBindingContextをインスタンス化します。

ここにも必要な情報が含まれているSOで別の質問は(あなたが部品番号を使用していない場合でも):

どのようにユニットテストの部品番号を使用してカスタムModelBinder <? />

scroll top