模拟 HttpClient.SendAsync 以返回内容不为空的响应

问题描述

我试图模拟 var response = await httpClient.SendAsync(request,CancellationToken.None);,但我的 response.Content 始终是 null

我的模拟看起来像...

var httpResponseMessage = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
httpResponseMessage.Content = new StringContent("test content",System.Text.Encoding.UTF8,"application/json");
A.CallTo(() => httpClient.SendAsync(A.Fake<HttpRequestMessage>(),CancellationToken.None)).Returns(Task.Fromresult(httpResponseMessage));

它似乎被正确模拟,但 response.Content 为空,但状态代码 - 例如 - 反映了我在测试中设置的内容

我相信你们中的一个人遇到过这个问题,所有的帮助将不胜感激。谢谢。

解决方法

可能未匹配对 SendAsync 的调用。我看到你配置了你的假来回应

A.CallTo(() => httpClient.SendAsync(A.Fake<HttpRequestMessage>(),CancellationToken.None))

但您的生产代码不太可能传递与您在此处拥有的 A.Fake<HttpRequestMessage>() 参数相等的第一个参数。

你的意思是不是

A.CallTo(() => httpClient.SendAsync(A<HttpRequestMessage>.Ignored,CancellationToken.None))

(或等效的 A<HttpRequestMessage>._)?

您可以在 Argument constraints 页面上了解如何匹配参数。具体来说,请参阅如何匹配 Ignoring arguments 子主题中的任何参数。