這個問題在這里已經有了答案: 在單元測驗情況下檢查 DefaultHttpContext 主體 1 個回答 2 天前關閉。
我正在撰寫一個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是 a NullStream,所以我嘗試設定這樣的流:
context.Response.Body = new BufferedStream(new MemoryStream());
但是,這沒有效果。
那么,我如何構建DefaultHttpContext, 以便我可以測驗回應?
uj5u.com熱心網友回復:
您可以使用 aMemoryStream并將位置重置為 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322262.html
