Лучший способ модульного тестирования ASP.NET Методы действий MVC, использующие BindingHelperExtensions.Обновить откуда?
-
09-06-2019 - |
Вопрос
При обработке сообщения формы у меня есть что-то вроде
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 });
}
Я не использую явные параметры в методе, поскольку ожидаю, что мне придется адаптироваться к переменному количеству полей и т.д.а метод с более чем 20 параметрами не привлекает.
Я полагаю, что мой единственный вариант здесь - создать макет всего HttpRequest, эквивалентный тому, что сделал Роб Конери.Является ли это лучшей практикой?Трудно сказать, учитывая, что фреймворк настолько новый.
Я также видел решения, связанные с использованием ActionFilter, чтобы вы могли преобразовать вышеупомянутую сигнатуру метода во что-то вроде
[SomeFilter]
public Insert(Contact contact)
Решение
Теперь я использую Модельбиндер так что мой метод действия может выглядеть (в основном) как:
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");
}
}
Другие советы
Оберните это в интерфейс и издевайтесь над ним.
Используйте NameValueDeserializer из http://www.codeplex.com/MVCContrib вместо обновления из.