Frage

In meiner Anwendung habe ich ein benutzerdefiniertes Modell Bindemittel, das ich auf die DefaultBinder in dem global.asax gesetzt:

 ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();

Wenn für Controller Unit-Tests zu schreiben Ich muss sicherstellen, dass der Controller verwendet das benutzerdefinierte Modell Binder, aber ich weiß nicht, wie dies zu tun.

Mein Test sieht wie folgt aus:

 [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);
 }

Mit diesem Gerät Test endet der Regler der Default zu verbrauchen. Was kann ich in diesem Test fügen Sie den Controller verwendet das benutzerdefinierte Modell Bindemittel zu gewährleisten?

War es hilfreich?

Lösung

Scott Hanselman hat einen Blog-Post zu dieser vor einer Weile bezogen werden:

Splitting Datetime - Unit Testing ASP.NET MVC Benutzerdefinierte Modell Binder

Der Teil, der Sie ist an der Unterseite des Pfostens unter „Testen des benutzerdefinierten Modell Binder“ interessieren würde. Grundsätzlich instanziert ein ModelBindingContext, dann Modelbinder instanziiert und ruft Bind () auf Ihrem Modelbinder im ModelBindingContext vorbei Sie erstellt (und der Controller dabei, wenn erforderlich).

Hier ist eine andere Frage an, so dass auch die Informationen enthält, die Sie benötigen (auch wenn Sie nicht verwenden Moq):

Wie Unit-Test eines benutzerdefinierter Modelbinder mit Moq?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top