A melhor maneira de teste de unidade ASP.NET MVC métodos de ação que usar BindingHelperExtensions.UpdateFrom?
-
09-06-2019 - |
Pergunta
Na manipulação de um formulário post tenho algo como
public ActionResult Insert()
{
Order order = new Order();
BindingHelperExtensions.UpdateFrom(order, this.Request.Form);
this.orderService.Save(order);
return this.RedirectToAction("Details", new { id = order.ID });
}
Eu não estou usando parâmetros explícitos no método de como eu esperava ter de adaptar-se a variável número de campos etc.e um método com mais de 20 parâmetros não é atraente.
Suponho que a minha única opção aqui é mock-up todo o HttpRequest, o equivalente ao que o Rob Conery tem feito.Esta é a melhor prática?Difícil dizer com um quadro que é tão novo.
Também já vi soluções que envolvam a utilização de um ActionFilter, de modo que você pode transformar o método acima assinatura para algo como
[SomeFilter]
public Insert(Contact contact)
Solução
Agora estou usando ModelBinder de modo que o meu método de ação pode olhar (basicamente) como:
public ActionResult Insert(Contact contact)
{
if (this.ViewData.ModelState.IsValid)
{
this.contactService.SaveContact(contact);
return this.RedirectToAction("Details", new { id = contact.ID });
}
else
{
return this.RedirectToAction("Create");
}
}
Outras dicas
Enrole-o em uma interface e mock.
Use NameValueDeserializer de http://www.codeplex.com/MVCContrib em vez de UpdateFrom.