有没有一种方法可以在决定要发送什么样的响应以进行测试之前获取http请求的内容? 多个测试将使用此类,并且每个测试将具有多个http请求。
此代码无法编译,因为lambda不是async
,但其中有一个await
。我对async-await不熟悉,所以不知道如何解决这个问题。我曾经考虑过使用多个TestHttpClientFactories,但那意味着重复的代码,因此放弃了,如果可能的话。
任何帮助都将不胜感激。
public class TestHttpClientFactory : IHttpClientFactory
{
public HttpClient CreateClient(string name)
{
var messageHandlerMock = new Mock<HttpMessageHandler>(MockBehavior.Strict);
messageHandlerMock.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.ReturnsAsync((HttpRequestMessage request, CancellationToken token) =>
{
HttpResponseMessage response = new HttpResponseMessage();
var requestMessageContent = await request.Content.ReadAsStringAsync();
// decide what to put in the response after looking at the contents of the request
return response;
})
.Verifiable();
var httpClient = new HttpClient(messageHandlerMock.Object);
return httpClient;
}
}