Модульное тестирование в контроллере WebAPI с заголовком запроса

#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);
    }
 

Когда я попытался добавить заголовок запроса, я получаю эту ошибку

введите описание изображения здесь

Это работает, когда я пытался добавить сеанс