Domanda

Nella mia domanda ho un modello personalizzato legante che ho impostato al DefaultBinder nel Global.asax:

 ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();

Durante la scrittura di unit test per i controllori ho bisogno di assicurarsi che il controller utilizza il modello personalizzato legante, ma non so come fare.

Il mio test è simile al seguente:

 [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 questo test unità controllore finisce con il DefaultModelBinder. Cosa posso aggiungere in questa prova per garantire il controller utilizza il modello personalizzato legante?

È stato utile?

Soluzione

Scott Hanselman ha fatto un post relativo a questo qualche tempo fa:

DateTime Splitting - Unit Testing ASP.NET MVC personalizzate Leganti Girl

La parte che avrebbe interesse è in fondo al post sotto "Prova del modello personalizzato Binder". In sostanza si crea un'istanza di un ModelBindingContext, quindi istanziare la vostra Modelbinder e chiamata Bind () sul tuo Modelbinder passando il ModelBindingContext si è creato (e il contesto di controllo se necessario).

Questa è un'altra domanda a SO che contiene anche le informazioni necessarie (anche se non si sta usando Moq):

Come unit test un ModelBinder personalizzato utilizzando Moq?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top