gpt4 book ai didi

c# - 模拟使用 IHttpClientFactory.CreateClient 创建的 HttpClient

转载 作者:行者123 更新时间:2023-12-04 00:56:01 28 4
gpt4 key购买 nike

正如标题所示,我有一些代码调用 IHttpClientFactory.CreateClient()创建一个 HttpClient 实例。
我在 .Net Core 3.1 中这样做
我需要 mock 这个。根据this question"C# Mock IHttpclient & CreateClient"以下应该工作......

[Test]
public void Mytest() {

var httpClientFactory = new Mock<IHttpClientFactory>(MockBehavior.Strict);

httpMessageHandler = new Mock<HttpMessageHandler>(MockBehavior.Strict);
httpMessageHandler.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,
})
.Verifiable();

var httpClient = new HttpClient(httpMessageHandler.Object);

httpClientFactory.Setup(_ => _.CreateClient()) // This fails
.Returns(httpClient).Verifiable();

systemUnderTest = new MyService(httpClientFactory.Object);
var result = systemUnderTest.MyMethod()

// Assert Stuff
}
但是,当我运行它时,会报告以下内容...

System.NotSupportedException : Unsupported expression: _ => _.CreateClient()Extension methods (here: HttpClientFactoryExtensions.CreateClient) may not be used in setup /verification expressions.


我显然做错了什么,但我看不出它是什么。
任何人都可以提供任何指示吗?

最佳答案

IHttpClientFactory 有一个方法, Create(string) .它还有一个扩展方法 Create(IHttpClientFactory) 使用默认配置(it passes Options.DefaultName )。
您不是在模拟接口(interface)方法,而是在模拟扩展方法,正如您已经意识到的那样,模拟扩展方法是不可能的。但不要害怕,我们有一个解决方案:模拟实际出现在界面上的方法!
您可以为所有客户端名称、特定名称或默认名称 ( string.Empty ) 模拟它:

// any name
httpClientFactory.Setup(_ => _.CreateClient(It.IsAny<string>()))
.Returns(httpClient).Verifiable();

// specific name
httpClientFactory.Setup(_ => _.CreateClient("SpecificName"))
.Returns(httpClient).Verifiable();

// the default name (extension method invokes this)
httpClientFactory.Setup(_ => _.CreateClient(string.Empty))
.Returns(httpClient).Verifiable();
最后一个选项匹配调用扩展方法时发生的情况。但请记住,如果您使用的是 命名客户 您的代码可能正在将名称传递给工厂,并且您希望与之匹配。

关于c# - 模拟使用 IHttpClientFactory.CreateClient 创建的 HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62512473/

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