Pergunta

Na minha aplicação eu tenho um fichário de modelo personalizado que eu definido para o DefaultBinder no global.asax:

 ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();

Ao escrever testes de unidade para os controladores de I precisa ter certeza de que o controlador usa o fichário de modelo personalizado, mas eu não sei como fazer isso.

Meu teste esta aparência:

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

Com esta unidade de teste as extremidades controlador para cima usando o DefaultModelBinder. O que posso adicionar este teste para assegurar que o controlador usa o fichário de modelo personalizado?

Foi útil?

Solução

Scott Hanselman feito um post relacionado a isso um tempo atrás:

Splitting DateTime - Unidade de Teste ASP.NET MVC pastas feitas sob encomenda modelo

A parte que interesse você está no fundo do post em "Testando o personalizado modelo Binder". Basicamente você instanciar um ModelBindingContext, então instancia seu ModelBinder e chamar Bind () em seu ModelBinder passando o ModelBindingContext você criou (e o contexto de controlador se necessário).

Aqui está outra pergunta no SO que também contém a informação que você precisa (mesmo se você não estiver usando Moq):

Como teste de unidade de um ModelBinder personalizado usando Moq?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top