#unit-testing #httpcontext #web-api-testing
Вопрос:
У меня есть метод в контроллере, который я тестирую, который ожидает значения в заголовке http — запроса.Я создал FakeHttpContext для передачи HttpContext. Но когда я попытался добавить заголовок в запрос, я получил некоторую ошибку.
Ниже приведен текст FakeHttpContext
private HttpContext FakeHttpContext()
{
var httpRequest = new HttpRequest("", "http://somethig.com/", "");
var stringWriter = new StringWriter();
var httpResponce = new HttpResponse(stringWriter);
var httpContext = new HttpContext(httpRequest, httpResponce);
var sessionContainer =
new HttpSessionStateContainer("id", new SessionStateItemCollection(),
new HttpStaticObjectsCollection()
, 10,
true,
HttpCookieMode.AutoDetect,
SessionStateMode.InProc, false);
httpContext.Items["AspSession"] =
typeof(HttpSessionState).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,null, CallingConventions.Standard,
new[] { typeof(HttpSessionStateContainer) },null).Invoke(new object[] { sessionContainer });
return httpContext;
}
Ниже приведен мой метод тестирования
public void FetchData_EDS_TestMethod()
{
var inputParameters = new Dictionary<string, object>();
inputParameters.Add("IsEncrypted", false);
var Data = new Dictionary<string, object>();
var sourcePar = new Dictionary<string, object>();
sourcePar.Add("SourceType", "1");
sourcePar.Add("DataSourceId", "6");
Data.Add("sourceparams", JsonConvert.SerializeObject(sourcePar));
Data.Add("IsMobile", false);
Data.Add("DeviceCategory", "Desktop");
inputParameters.Add("Data", JsonConvert.SerializeObject(Data));
HttpContext.Current = FakeHttpContext();
HttpContext.Current.Session["sessionid"]="";
// here we will test fetchData API
VividFlowApiController cls = new VividFlowApiController();
cls.FetchData(inputParameters);
}
Когда я попытался добавить заголовок запроса, я получаю эту ошибку
Это работает, когда я пытался добавить сеанс