Unit-Test einen Controller mit benutzerdefinierten Modell Binder
-
18-09-2019 - |
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?
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?