如何阅读 DefaultHttpContext 的主体?
How can I read the Body of the DefaultHttpContext?
我正在编写一个在调用中使用 DefaultHttpContext
的测试(startup
是这里的测试对象):
[Fact]
public async void HandleCabinet_ShouldReturnValidCabinetSettings()
{
var startup = new Startup();
var context = DefaultHttpConext();
await startup.HandleCabinet(context);
string body;
using (var reader = new StreamReader(context.Response.Body, Encoding.UTF8))
{
body = reader.ReadToEnd();
}
Assert.Equal("some expectation", body);
}
问题是,body
始终是一个空字符串。在 HandleCabinet
方法中,我这样写:
await context.Response.WriteAsync("some expectation");
我看到默认情况下,Body
是一个 NullStream
,所以我尝试像这样设置流:
context.Response.Body = new BufferedStream(new MemoryStream());
但是,那没有效果。
那么,我如何构造 DefaultHttpContext
,以便我可以测试响应?
您可以使用 MemoryStream
并将位置重置为 0。
例如
正在创建 DefaultHttpContext
:
private DefaultHttpContext CreateHttpContext()
{
var context = new DefaultHttpContext
{
Response =
{
Body = new MemoryStream()
}
};
return context;
}
正文到字符串:(注意:C# 9 语法)
public static string StreamToString(Stream stream)
{
stream.Position = 0;
using StreamReader reader = new(stream, Encoding.UTF8);
return reader.ReadToEnd();
}
断言:
var body = StreamToString(context.Response.Body);
Assert.Equal("some expectation", body);
我用来创建 DefaultHttpContext
的设置
我正在编写一个在调用中使用 DefaultHttpContext
的测试(startup
是这里的测试对象):
[Fact]
public async void HandleCabinet_ShouldReturnValidCabinetSettings()
{
var startup = new Startup();
var context = DefaultHttpConext();
await startup.HandleCabinet(context);
string body;
using (var reader = new StreamReader(context.Response.Body, Encoding.UTF8))
{
body = reader.ReadToEnd();
}
Assert.Equal("some expectation", body);
}
问题是,body
始终是一个空字符串。在 HandleCabinet
方法中,我这样写:
await context.Response.WriteAsync("some expectation");
我看到默认情况下,Body
是一个 NullStream
,所以我尝试像这样设置流:
context.Response.Body = new BufferedStream(new MemoryStream());
但是,那没有效果。
那么,我如何构造 DefaultHttpContext
,以便我可以测试响应?
您可以使用 MemoryStream
并将位置重置为 0。
例如
正在创建 DefaultHttpContext
:
private DefaultHttpContext CreateHttpContext()
{
var context = new DefaultHttpContext
{
Response =
{
Body = new MemoryStream()
}
};
return context;
}
正文到字符串:(注意:C# 9 语法)
public static string StreamToString(Stream stream)
{
stream.Position = 0;
using StreamReader reader = new(stream, Encoding.UTF8);
return reader.ReadToEnd();
}
断言:
var body = StreamToString(context.Response.Body);
Assert.Equal("some expectation", body);
我用来创建 DefaultHttpContext