Использование маршрутов Asp.Net MVC из не -веб-приложений (тестов)

Я пишу тесты спецификаций с помощью Watin для приложения Asp.Net MVC, которое использует T4MVC.

Я обнаружил, что использую в тестах URL-адреса «волшебной строки», что мне не нравится.

[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
    string rootUrl = ConfigurationManager.AppSettings["RootUrl"];
    string fullUrl = string.Format("{0}/Authentication/Signup",rootUrl);
    WebBrowser.Current.GoTo(fullUrl);
}

Я бы предпочел использовать свои результаты действий T4MVC, как я делаю в приложении MVC, что-то вроде этого...

[Given(@"I am on the sign up page")]
public void GivenIAmOnTheSignUpPage()
{
    WebBrowser.Current.GoTo(MVC.Authentication.SignUp().ToAbsoluteUrl());
 }

Мой ToAbsoluteUrlметод расширения

public static class RouteHelper
{
    private static UrlHelper _urlHelper;
    private static string _rootUrl;

    public static string ToAbsoluteUrl(this ActionResult result)
    {
        EnsureUrlHelperInitialized();

        var relativeUrl = _urlHelper.Action(result);
        return string.Format("{0}/{1}", _rootUrl, relativeUrl);
    }

    private static void EnsureUrlHelperInitialized()
    {
        if (_urlHelper==null)
        {
            _rootUrl = ConfigurationManager.AppSettings["RootUrl"];

            var request = new HttpRequest("/", _rootUrl, "");
            var response = new HttpResponse(new StringWriter());
            var context = new HttpContext(request,response);
            HttpContext.Current = context;
            var httpContextBase = new HttpContextWrapper(context);


            RouteTable.Routes.Clear();
            MvcApplication.RegisterRoutes(RouteTable.Routes);

            var requestContext = new RequestContext(httpContextBase, RouteTable.Routes.GetRouteData(httpContextBase));

            _urlHelper = new UrlHelper(requestContext, RouteTable.Routes);
        }
    }
}

Каков правильный способ инициализации RequestContext и RouteCollection, чтобы что я могу генерировать свои тестовые URL-адреса?

В настоящее время я получаю исключение NullReferenceException в строке var requestContext = new RequestContext(httpContextBase, RouteTable.Routes.GetRouteData(httpContextBase));. Это правильный способ создать новый requestContext?

Или, если есть лучший способ получить ActionResult (от T4MVC )и преобразовать его в абсолютный URL-адрес вне веб-приложения, это действительно то, что я ищу.

5
задан Brook 8 May 2012 в 15:50
поделиться