Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core 在同一方法中模拟多个httpClient调用_.net Core_Httpclient_Moq - Fatal编程技术网

.net core 在同一方法中模拟多个httpClient调用

.net core 在同一方法中模拟多个httpClient调用,.net-core,httpclient,moq,.net Core,Httpclient,Moq,我正在尝试使用Moq和xunit编写一个单元测试。在这个测试中,我必须模拟两个httpClient调用 我正在为dotnetcore API编写单元测试。 在我的API中,我必须对另一个API进行2次HTTP调用,以获得我想要的信息。 -在第一个调用中,我从这个API获得一个jwt令牌。 -在第二个调用中,我使用在第一个调用中获取的令牌进行了一个GetAsync调用,以获取所需的信息 我不知道如何模仿这两个不同的电话。 在这段代码中,我只能模拟一个httpClient调用 var handle

我正在尝试使用Moq和xunit编写一个单元测试。在这个测试中,我必须模拟两个httpClient调用

我正在为dotnetcore API编写单元测试。 在我的API中,我必须对另一个API进行2次HTTP调用,以获得我想要的信息。 -在第一个调用中,我从这个API获得一个jwt令牌。 -在第二个调用中,我使用在第一个调用中获取的令牌进行了一个GetAsync调用,以获取所需的信息

我不知道如何模仿这两个不同的电话。 在这段代码中,我只能模拟一个httpClient调用

 var handlerMock = new Mock<HttpMessageHandler>(MockBehavior.Strict);
            handlerMock
               .Protected()
               // Setup the PROTECTED method to mock
               .Setup<Task<HttpResponseMessage>>(
                  "SendAsync",
                  ItExpr.IsAny<HttpRequestMessage>(),
                  ItExpr.IsAny<CancellationToken>()
               )
               // prepare the expected response of the mocked http call
               .ReturnsAsync(new HttpResponseMessage()
               {
                   StatusCode = HttpStatusCode.BadRequest,
                   Content = new StringContent(JsonConvert.SerializeObject(getEnvelopeInformationsResponse), Encoding.UTF8, "application/json")
               })
               .Verifiable();
var handlerMock=new Mock(MockBehavior.Strict);
handlerMock
.Protected()
//将受保护的方法设置为mock
.设置(
“SendAsync”,
ItExpr.IsAny(),
ItExpr.IsAny()
)
//准备模拟http调用的预期响应
.ReturnsAsync(新的HttpResponseMessage()
{
StatusCode=HttpStatusCode.BadRequest,
Content=newstringcontent(JsonConvert.SerializeObject(getEnvelopeInformationResponse),Encoding.UTF8,“application/json”)
})
.可验证();

你知道我该怎么做才能接到两个不同的电话和两个不同的HttpResponseMessage吗?

不要使用
It.IsAny
,而是使用
It.Is

It.Is
方法将允许您指定谓词以查看参数是否匹配

在您的示例中:

handlerMock
    .Protected()
    .Setup<Task<HttpResponseMessage>>(
        "SendAsync",
        It.Is<HttpRequestMessage>(x => x.RequestUri.Path == "/myjwtpath"),
        It.IsAny<CancellationToken>())
    .ReturnsAsync(new HttpResponseMessage(...))
    .Verifiable();

handlerMock
    .Protected()
    .Setup<Task<HttpResponseMessage>>(
        "SendAsync",
        It.Is<HttpRequestMessage>(x => x.RequestUri.Path == "/myotherpath"),
        It.IsAny<CancellationToken>())
    .ReturnsAsync(new HttpResponseMessage(...))
    .Verifiable();
handlerMock
.Protected()
.设置(
“SendAsync”,
Is(x=>x.RequestUri.Path==“/myjwtpath”),
It.IsAny())
.ReturnsAsync(新的HttpResponseMessage(…)
.可验证();
handlerMock
.Protected()
.设置(
“SendAsync”,
Is(x=>x.RequestUri.Path==“/myotherpath”),
It.IsAny())
.ReturnsAsync(新的HttpResponseMessage(…)
.可验证();
这将允许您定义一个mock,它根据输入的
HttpRequestMethod.RequestUri.Path
属性返回两个不同的值