0

我收到错误消息:

System.ArgumentException:方法 HttpClient.SendAsync 是公共的。改用强类型的 Expect 重载: mock.Setup(x => x.SendAsync());

在尝试运行以下代码时:

autoMock.Mock<HttpClient>()
        .Protected()
        .Setup<Task<HttpResponseMessage>>(
            "SendAsync",
            ItExpr.IsAny<HttpRequestMessage>(),
            ItExpr.IsAny<CancellationToken>()
        )
        .ReturnsAsync(httpResponseMessage)
        .Verifiable();

我在这里可能缺少什么?

4

1 回答 1

1
  1. 你需要模拟HttpRequestHandler

您可能需要传递MockBehavior.StrictMock<T>ctor

var mockedHandler = new Mock<HttpMessageHandler>();
  1. 您需要创建预期的响应:
var expectedResponse = new HttpResponseMessage
{
    StatusCode = HttpStatusCode.OK,
    Content = new StringContent(@"..."),
};
  1. 你必须把东西连接起来:
mockedHandler
   .Protected()
   .Setup<Task<HttpResponseMessage>>(
      "SendAsync",
      ItExpr.IsAny<HttpRequestMessage>(),
      ItExpr.IsAny<CancellationToken>())
   .ReturnsAsync(expectedResponse);
  1. mockedHandler最后你应该在实例化HttpClient实例时传递它
var httpClient = new HttpClient(handlerMock.Object);

值得看看MockHttp库,它让你的模拟更容易。

于 2021-09-16T08:23:39.997 回答