Как я могу проверить разрешение маршрута / действия URL со строкой запроса? - PullRequest
6 голосов
/ 25 мая 2010

Я пытаюсь использовать код, подобный следующему, в моих модульных тестах,

/* Test setup code */
_routes = RouteTable.Routes;
MvcApplication.RegisterRoutes(_routes); //set up the routes as they would be in actual application
/* test code */
Expression<Func<SearchController, ActionResult>> actionFunc;
actionFunc = action => action.Results("x", 3, null);
RouteTestingExtensions.Route(
   "~/Search/Results?searchText=x"
).ShouldMapTo<SearchController>(actionFunc);

Проблема в том, что происходит сбой с сообщением «Ожидаемые результаты были Результатами? SearchText = x»

Есть ли у кого-нибудь решение, которое позволило бы мне проверить, что URL (со строкой запроса) разрешает правильный контроллер, действие и аргументы?

К вашему сведению, у меня нет явной настройки маршрута в Global.asax.cs, поскольку маршрут по умолчанию работает для реального приложения - он просто не работает в этом тесте.

Ответы [ 2 ]

9 голосов
/ 30 сентября 2010

ИМХО имеет смысл юнит-тестирование только пользовательских маршрутов.Проверка того, что параметры строки запроса будут преобразованы в аргументы действия контроллера, не является необходимой и не приносит никакой пользы вашему приложению.Эта работа выполняется с помощью связующего устройства по умолчанию и тщательно тестируется Microsoft (я надеюсь).

При этом MVCContrib.TestHelper позволяет элегантно тестировать пользовательские маршруты.Предположим, например, что вы реализовали подкачку в своем приложении и определили собственный маршрут, чтобы иметь красивые URL для SEO:

routes.MapRoute(
    "Custom",
    "foo/{startPage}/{endPage}",
    new 
    { 
        controller = "Search", 
        action = "Results", 
    }
);

и вот соответствующий контроллер:

public class SearchController : Controller
{
    public ActionResult Results(int startPage, int endPage)
    {
        return View();
    }
}

Этот маршрут можетбудет проверен следующим образом:

"~/foo/10/20".ShouldMapTo<SearchController>(c => c.Results(10, 20));

Это будет эффективно проверять, что контроллер по умолчанию Search, действие по умолчанию Results и что оба параметра startPage и endPage будут инициализированы в своисоответствующие значения из маршрута.

1 голос
/ 30 сентября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...