gpt4 book ai didi

c# - 如何基于 URL 使用 Moq 对 HttpClient (HttpMessageHandler) 进行单元测试

转载 作者:行者123 更新时间:2023-12-04 08:44:19 27 4
gpt4 key购买 nike

对于开发人员,
我会 mock HttpMessageHandler 来测试 HttpClient,我的问题是我将如何根据
URL 和 Http 方法?所以响应将是方法和 URL 的函数:

Get + "http://testdoc.com/run?test=true&t2=10   => return X
Get + "http://testdoc.com/walk?test=true&t2=10 => return Y
Post + "http://testdoc.com/walk => return Z
所有 3 个调用都会返回不同的内容。
我当前的单元测试捕获了所有内容:
var mockMessageHandler = new Mock<HttpMessageHandler>();
mockMessageHandler.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage
{ ... });
谢谢,

最佳答案

问题是你告诉 moq 设置使用任何 http 请求消息:ItExpr.IsAny<HttpRequestMessage>() ,所以对于 HttpRequestMessage 的任何实例它总是会返回相同的结果。
如果您有不同的 X 个结果,您将需要创建 X 个不同的实例:

string firstUri = "http://testdoc.com/run?test=true&t2=10";
HttpRequestMessage httpRequestMessage_1 = new HttpRequestMessage
{
RequestUri = new Uri(firstUri),
Method = ...,
Content = ...,
};
而不是 ItExpr.IsAny<HttpRequestMessage>()httpRequestMessage_1 的那个实例, 和:
.Setup<Task<HttpResponseMessage>>("SendAsync", httpRequestMessage_1, ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage
{ /* Something with X */ });

关于c# - 如何基于 URL 使用 Moq 对 HttpClient (HttpMessageHandler) 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64406694/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com