我有以下私有方法允許我模擬并因此測驗 HttpClient
private Mock<HttpClient> GetMockHttClient(HttpStatusCode desiredStatusCode, User user)
{
var httpMessageHandler = new Mock<HttpMessageHandler>();
httpMessageHandler.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>()
)
.ReturnsAsync((HttpRequestMessage request, CancellationToken token) =>
{
var response = new HttpResponseMessage
{
Content = new StringContent(JsonSerializer.Serialize(user)), //<-- this could be anything
ReasonPhrase = null,
RequestMessage = null,
StatusCode = desiredStatusCode,
Version = new Version(1, 0)
};
return response;
});
var httpClientMock = new Mock<HttpClient>(httpMessageHandler.Object)
{
Object =
{
BaseAddress = new Uri("[Redacted]")
}
};
return httpClientMock;
}
現在我正在傳遞一個用戶物件,但是我還有其他測驗,例如我可能需要int[]序列化或List<User>序列化。
復制粘貼此方法并更改我希望序列化的物件似乎很荒謬,那么如何使此方法通用,以便在呼叫它時可以指定將序列化為 json 的型別。
uj5u.com熱心網友回復:
private Mock<HttpClient> GetMockHttClient<TModel>(HttpStatusCode desiredStatusCode, TModel model)
{
var httpMessageHandler = new Mock<HttpMessageHandler>();
httpMessageHandler.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>()
)
.ReturnsAsync((HttpRequestMessage request, CancellationToken token) =>
{
var response = new HttpResponseMessage
{
Content = new StringContent(JsonSerializer.Serialize<TModel>(model)),
ReasonPhrase = null,
RequestMessage = null,
StatusCode = desiredStatusCode,
Version = new Version(1, 0)
};
return response;
});
var httpClientMock = new Mock<HttpClient>(httpMessageHandler.Object)
{
Object =
{
BaseAddress = new Uri("[Redacted]")
}
};
return httpClientMock;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/465684.html
標籤:C# 仿制药 起订量 dotnet-httpclient
上一篇:如何動態選擇等價測驗的屬性-FluentAssertions
下一篇:泛型集插入函式int
