Beste Möglichkeit zum Unit-Testen von ASP.NET MVC-Aktionsmethoden, die BindingHelperExtensions.UpdateFrom verwenden?
-
09-06-2019 - |
Frage
Bei der Bearbeitung eines Formularbeitrags habe ich so etwas wie
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 });
}
Ich verwende in der Methode keine expliziten Parameter, da ich davon ausgehe, dass ich mich an eine variable Anzahl von Feldern usw. anpassen muss.und eine Methode mit mehr als 20 Parametern ist nicht ansprechend.
Ich nehme an, dass meine einzige Möglichkeit hier darin besteht, den gesamten HttpRequest nachzubilden, was dem entspricht, was Rob Conery getan hat.Ist das eine Best Practice?Bei einem so neuen Framework ist das schwer zu sagen.
Ich habe auch Lösungen gesehen, die die Verwendung eines ActionFilters beinhalten, damit Sie die obige Methodensignatur in etwas wie „
[SomeFilter]
public Insert(Contact contact)
Lösung
Ich benutze jetzt ModelBinder damit meine Aktionsmethode (im Grunde) so aussehen kann:
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");
}
}
Andere Tipps
Wickeln Sie es in eine Schnittstelle ein und verspotten Sie es.
Verwenden Sie NameValueDeserializer von http://www.codeplex.com/MVCContrib anstelle von UpdateFrom.