mvccontrib тестируют помощника и проверяющий http маршруты сообщения и параметры

В моем приложении MVC Asp.net у меня есть два метода на контроллере, один для того, когда пользователь сначала прибывает в представление и затем то, когда они отправляют форму на упомянутом представлении.

public ActionResult Foo() {}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Foo(string id, Account accountToFoo) {}

Во втором действии существует пользовательский образцовый редактор связей, который это собирает, учетная запись возражают, что я действую на, хотя это действительно не важно. Это все хорошо работает в тестировании локально на сервере.

Мы пытаемся быть довольно хорошими о записи, что модульные тесты для тестирования всех наших различных взглядов правильно становятся направленными к, включая тех, которые являются HTTP POST. Для этого мы использовали тестового помощника mvccontrib.

Тестирование добирается, были супер просты

"~/account/foo/myusername".
       Route().
       ShouldMapTo<AccountController>(c => c.Foo("myusername"));

Мой вопрос находится в тестировании маршрутов POST, как я пишу лямбду, которую я использовал бы, чтобы проверить, что сообщение получает точные значения, подобные ПОЛУЧИТЬ тесту выше?

Для POST это смотрит что-то как:

"~/account/foo".
         WithMethod(HttpVerbs.Post).
         ShouldMapTo<AccountController>(a => something_something);

Это - something_something часть моей лямбды, из-за которой я испытываю затруднения. Используя произвольные значения не работает ("=> a. Нечто (0, новая Учетная запись ()"). Как я указал бы математические ожидания как часть теста?

РЕДАКТИРОВАНИЕ я надеялся, было чем-то сродни способу, которым Moq имеет лямбды для операторов, таких как нечто. Установка (s => s. Нечто (Это. IsAny (), Это. (Я => i> 32)) и так далее. Даже я должен явно предоставить значения, это осуществимо - я просто не могу казаться grok желаемой структурой для передачи тех явных значений.

6
задан bakasan 2 February 2010 в 09:52
поделиться

2 ответа

Вот пример. Предположим, у вас есть следующее действие:

public AccountController : Controller
{
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Foo(string id) 
    {
        return View();
    }
}

И зарегистрирован следующий маршрут:

RouteTable.Routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "home", action = "index", id = "" }
);

Вы можете проверить это следующим образом:

var routeData = "~/account/foo".WithMethod(HttpVerbs.Post);
routeData.Values["id"] = "123";
routeData.ShouldMapTo<AccountController>(c => c.Foo("123"));

Может потребоваться некоторая настройка, чтобы включить второй аргумент Account , который у вас есть.

15
ответ дан 8 December 2019 в 13:46
поделиться

Использование синтаксиса помощника mvccontrib:

"~/account/foo".WithMethod(HttpVerbs.Post).ShouldMapTo<AccountController>(a => a.foo(null));

Вы передаете null, поскольку метод Foo(string id, Account accountToFoo) никогда не выполняется как часть теста маршрутизации.

2
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: