Unidade de controlador de teste um com modelo personalizado aglutinante
-
18-09-2019 - |
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?
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?