Мне нужно проверить класс-помощник, который управляет сложной цепочкой.
Я использую этот вспомогательный метод, чтобы издеваться над HttpContext
:
public static HttpContext FakeHttpContext(string url, string queryString)
{
var httpRequest = new HttpRequest("", url, queryString);
var stringWriter = new StringWriter();
var httpResponse = new HttpResponse(stringWriter);
var httpContext = new HttpContext(httpRequest, httpResponse);
var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),
new HttpStaticObjectsCollection(), 10, true,
HttpCookieMode.AutoDetect,
SessionStateMode.InProc, false);
SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);
return httpContext;
}
Проблема в том, что HttpRequest
теряет запрос:
HttpContext.Current = MockHelpers.FakeHttpContext("http://www.google.com/", "name=gdfgd");
HttpContext.Current.Request.Url
"http://www.google.com/"
, а не "http://www.google.com/?name=gdfgd"
, как ожидалось.
Если я отлаживаю, я вижу, что сразу после контура HttpRequest строка запроса теряется.
Обходной путь, который я использую, - передать URL-адрес с помощью querystring в конструктор HttpRequest:
HttpContext.Current = MockHelpers.FakeHttpContext("http://www.google.com/?name=gdfgd","");