0

我试图嘲笑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 为空,但状态代码 - 例如 - 反映了我在测试中设置的内容。

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

4

1 回答 1

4

很可能调用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页面上阅读有关如何匹配参数的信息。具体来说,请参阅如何匹配忽略参数子主题中的任何参数。

于 2021-01-01T22:54:42.800 回答