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:

( ctor渡す必要があるかもしれませんMockBehavior.StrictMock<T>)

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 に答える