0

私のアプリケーションには、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 を使用することになります。コントローラーがカスタム モデル バインダーを使用していることを確認するために、このテストに何を追加できますか?

4

1 に答える 1

3

Scott Hanselman は、これに関連するブログ投稿を少し前に作成しました。

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

興味のある部分は、「カスタム モデル バインダーのテスト」の下の投稿の下部にあります。基本的には、ModelBindingContext をインスタンス化してから、Modelbinder をインスタンス化し、作成した ModelBindingContext (および必要に応じてコントローラー コンテキスト) を渡す Modelbinder で Bind() を呼び出します。

SO の別の質問には、必要な情報も含まれています (Moq を使用していない場合でも)。

Moqを使用してカスタムModelBinderを単体テストする方法は?

于 2009-11-07T12:55:04.540 に答える