如何为单元测试设置 HttpResponse Header

问题描述 投票:0回答:0

我必须为将 Cvs 文件导入和转换为组件的函数编写单元测试 为了完成这项工作,我在测试中初始化了 Controllers HtpContext。如下

public async Task Parse_ValidCsv()
{
    //*
    Test Data is implemented here 
    *// 
   var controller = _provider.GetService<ComponentController>();
            var content = new MultipartFormDataContent();
            var streamContent = new StreamContent(new                           

    MemoryStream(Encoding.UTF8.GetBytes(_fileContent)));
            content.Add(streamContent, "file", "file.csv");


    controller.ControllerContext = new ControllerContext();
    controller.ControllerContext.HttpContext = new DefaultHttpContext();
    controller.ControllerContext.HttpContext.Request.Headers.ContentType =   
    content.Headers.ContentType.ToString();
    controller.ControllerContext.HttpContext.Request.Body = await content.ReadAsStreamAsync();
    var response = await controller.Parse() as JsonResult;
    _jobs = response?.Value as Dictionary<string, Guid>;
    var dictionary = _jobs;
    Guid id;
    _jobs.TryGetValue("job", out id);
    var resultSetNew = await controller.GetImportJobResults(id, 1, 0, 5,"","").ToListAsync();
...

}

到目前为止,在调试模式下,我可以看到组件被正确解析。 我现在遇到的错误发生在下面的函数中

 private IQueryable<T> QueryResults<T>(IQueryable<T> query, int? skip, int? take, string orderBy,  
 string filter, bool supportWildcards = false, bool updateHeaders = false)
{
    if (!string.IsNullOrWhiteSpace(filter)) query = query.Where(supportWildcards ?   
         filter.TreatQueryNonWordCharactersAsWildcard() : filter);
    if (!string.IsNullOrWhiteSpace(orderBy)) query = query.OrderBy(orderBy);

    var count = query.Count();
    var range = (take.HasValue, skip.HasValue) switch
    {
        (true, true) => $"{Math.Min(skip.Value, count - 1)}-{Math.Min(skip.Value + take.Value - 1,     
        count - 1)}",
        (true, false) => $"0-{Math.Min(take.Value - 1, count - 1)}",
        (false, true) => $"{Math.Min(skip.Value, count - 1)}-{count - 1}",
        (false, false) => "*"
     };

     if (updateHeaders) Response.Headers.ContentRange = $"entries {range}/{count}";
     if (skip.HasValue) query = query.Skip(skip.Value);
     if (take.HasValue) query = query.Take(take.Value);
            
     return query;
}

在行中 if (updateHeaders) Response.Headers.ContentRange = $"entries {range}/{count}"; 抛出 Null 异常。我如何正确初始化 Response.Headers?

我尝试在 Arrange 部分设置标题,但因为它是只读的,所以我不能这样做。

c# unit-testing model-view-controller controller httpresponse
© www.soinside.com 2019 - 2024. All rights reserved.