C# 单元测试中间件,如何在.NETCore3.1中将HttpRequest添加到HttpContext

C# 单元测试中间件,如何在.NETCore3.1中将HttpRequest添加到HttpContext,c#,unit-testing,.net-core,httprequest,middleware,C#,Unit Testing,.net Core,Httprequest,Middleware,我试图了解如何测试.NET核心中间件 public class MyMiddleware { public async Task Invoke(HttpContext context) { var requestProperties = GetPropertiesFromRequest(context.Request); } public string GetPropertiesFromRequest(HttpRequest re

我试图了解如何测试.NET核心中间件

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上的请求属性是只读的。是否有其他方法将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
//...