ユニットは、カスタムモデルバインダーとコントローラをテスト
-
18-09-2019 - |
質問
私のアプリケーションでは、私は私がの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で別の質問は(あなたが部品番号を使用していない場合でも):
所属していません StackOverflow