单元测试MiddleWare,如何在.NET Core 3.1中向HttpContext添加HttpRequest

奥西奥

我试图弄清楚如何测试一个.NET Core中间件。

public class MyMiddleware
    {
    public async Task Invoke(HttpContext context) {
    
      var requestProperties = GetPropertiesFromRequest(context.Request);
    } 
    
    public string GetPropertiesFromRequest(HttpRequest request) {
      //do stuff with request
    }
}

我已经设置了单元测试,需要在其中将HttpContext传递给中间件。我遇到的问题是,我似乎没有找到将HttpRequest添加到上下文的方法。

    [Fact]
    public async Task Middleware_should_get_properties_from_request()
    {
        var request = new HttpRequestMessage()
        {
            Method = HttpMethod.Get,
            RequestUri = new Uri("https://localhost:5001/"),
            Content = new StringContent({ 'message':'some content'}, Encoding.UTF8, "application/json"),
        };

    HttpContext context = new DefaultHttpContext();
    //context.Request = request;  //how to set the request on the context ?

     var myMiddleware = new MyMiddleware();
     await myMiddleware.Invoke(context);

     //Assert properties 
 }

HttpContext上的Request属性是只读的。还有另一种方法可以将httpRequest添加到上下文吗?

恩科西

只需在上下文的request属性上设置属性。DefaultHttpContext默认创建一个

//...

var httpContext = new DefaultHttpContext();

var json = JsonConvert.SerializeObject("{ 'message':'some content'}");
var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
httpContext.Request.Body = stream;

httpContext.Request.ContentLength = stream.Length;
httpContext.Request.ContentType = "application/json";

 var myMiddleware = new MyMiddleware();

//Act
await myMiddleware.Invoke(httpContext);

//Assert
//...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ASP.NET Core的X单元单元测试中模拟AutoMapper IConfigurationProvider

如何在 .NET Core 3.1 中对使用 ExecuteSqlRawAsync 调用存储过程的函数进行单元测试?

如何在 .Net Core 中对 ADF PipeLineRun 进行单元测试?

如何在Visual Studio 2017 Mac中调试.NET Core /标准单元测试?

如何在ASP.NET Core中对ViewBag进行单元测试?

如何在ASP.NET Core MVC中对RazorViewEngineOptions进行单元测试?

如何在ASP.NET Core 1.1中对使用HttpContext的MVC控制器进行单元测试

如何在ASP.NET Core中对Web API的动作过滤器属性进行单元测试?

如何在ASP.NET Core的单元测试中为请求设置查询字符串?

如何在Docker容器中运行.NET单元测试

如何使用Moq对.NET Core 3.1中的LoggerMessage.Define()进行单元测试?

如何对.NET Core中的Startup.cs进行单元测试

如何检查ASP.NET Core 3.0的单元测试中是否记录了错误?

在 asp.net core 中单元测试 UserManager<IdentityUser>

.NET Core中的单元测试托管服务

API ASP.NET Core 中的单元测试

如何在ASP.NET 5 / MVC 6中的单元测试中访问HttpContext

如何在 ASP.NET Core 中使用 mysql 进行单元测试、actionresult

如何在.NET Core代码的单元测试中提供ILogger <T>?

如何在ASP.NET Core中使用ILogger进行单元测试

如何将调试日志记录添加到C#.NET Core单元测试中?

.NET Core如何进行单元测试服务?

如何在ASP.NET Core 1 MVC 6中模拟IFormFile进行单元/集成测试?

单元测试.NET Core 3 Web API控制器

如何在Golang的单元测试中测试net.Conn?

如何在单元测试中验证EF Core DBContext配置

如何在Entity Framework Core中对事务进行单元测试?

如何在C#中对PowerShell Core二进制cmdlet进行单元测试

如何在.Net Core 3中引用托管服务?