Это все еще рекомендуемый способ модульного тестирования с API, для которых нужны HttpRequest и HttpResponse? - PullRequest
3 голосов
/ 17 января 2012

Ссылка на этот вопрос и конкретно этот ответ , за который проголосовали, но не отметили. Мне не нравится помеченный ответ, потому что мне нужно провести модульное тестирование контроллера.

Помещение их в HttpRequest и HttpResponse во время Application_BeginRequest немного пахнет, но я имею дело с библиотекой ComponentSpace SAML 2 , которая принимает эти типы в качестве аргументов метода. Нет ли лучшего способа получить доступ к ним в MVC модульно-тестируемым способом?

Вот с чем я сейчас работаю. Может реорганизовать .Items в метод расширения для инкапсуляции приведенной и магической строки, но это основная идея:

Global.asax:

protected void Application_BeginRequest()
{
    // put the raw request in context items for use by ComponentSpace SAML lib
    Context.Items["HttpRequest"] = Context.Request;
    Context.Items["HttpResponse"] = Context.Response;
}

в методах обслуживания:

// HttpContext is an instance of HttpContextBase
ServiceProvider.SendAuthnRequestByHTTPPost(
    HttpContext.Items["HttpResponse"] as HttpResponse, 
    authnRequest.Destination, authnRequestXml, relayState);

ServiceProvider.ReceiveSAMLResponseByHTTPPost(
    HttpContext.Items["HttpRequest"] as HttpRequest, 
    out samlResponseXml, out relayState);

1 Ответ

0 голосов
/ 18 января 2012

Я не понимаю необходимости следующей строки в вашем запросе на начало

 Context.Items["HttpRequest"] = Context.Request;

Если вам нужна только следующая строка

 HttpContext.Items["HttpRequest"] as HttpRequest,

Вы можете получить тот же эффект, выполнив следующее

HttpContext.Current.Request
...