Лучший способ модульного тестирования методов действий ASP.NET MVC, использующих BindingHelperExtensions.UpdateFrom?

При обработке сообщения формы у меня есть что-то вроде

    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)

person Joseph Kingry    schedule 26.08.2008    source источник


Ответы (3)


Сейчас я использую ModelBinder, чтобы мой метод действия мог выглядеть (в основном) так:

    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");
        }
    }
person Joseph Kingry    schedule 29.08.2008

Оберните его в интерфейс и издевайтесь над ним.

person Matt Hinze    schedule 26.08.2008

Используйте NameValueDeserializer из http://www.codeplex.com/MVCContrib вместо UpdateFrom.

person liammclennan    schedule 26.08.2008