Pregunta

En mi aplicación tengo un ligante modelo personalizado que me puse manos a la DefaultBinder en el Global.asax:

 ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();

Al escribir las pruebas unitarias para los controladores que necesito para asegurarse de que el controlador utiliza el ligante modelo personalizado, pero no sé cómo hacer esto.

Mi prueba es el siguiente:

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

Con esta prueba de la unidad del controlador termina usando el DefaultModelBinder. ¿Qué puedo añadir en esta prueba para asegurar el controlador utiliza el ligante modelo personalizado?

¿Fue útil?

Solución

Scott Hanselman hizo un post relacionado con este hace un tiempo:

DateTime División - Unidad de Pruebas de ASP.NET MVC personalizados Modelo aglutinantes

La parte que le interesaría está en la parte inferior del poste bajo "Prueba de la Carpeta Modelo personalizado". Básicamente se ejemplariza un ModelBindingContext, entonces instancia su Modelbinder y llamada bind () en su Modelbinder que pasa en el ModelBindingContext que ha creado (y el contexto del controlador si es necesario).

Aquí es otra cuestión a fin de que también contiene la información que necesita (incluso si no se está usando Moq):

Como prueba unitaria de un ModelBinder personalizado utilizando Moq

scroll top