【发布时间】:2021-02-17 08:31:00
【问题描述】:
更新:
完整的代码示例:
public class DelegatingHandlerStub : DelegatingHandler {
private readonly Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> _handlerFunc;
public DelegatingHandlerStub() {
_handlerFunc = (request, cancellationToken) => Task.FromResult(request.CreateResponse(HttpStatusCode.OK));
}
public DelegatingHandlerStub(Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> handlerFunc) {
_handlerFunc = handlerFunc;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
return _handlerFunc(request, cancellationToken);
}
}
public async Task Should_Return_Ok() {
//Arrange
var expected = "Hello World";
var mockFactory = new Mock<IHttpClientFactory>();
var configuration = new HttpConfiguration();
var clientHandlerStub = new DelegatingHandlerStub((request, cancellationToken) => {
request.SetConfiguration(configuration);
var response = request.CreateResponse(HttpStatusCode.OK, expected);
return Task.FromResult(response);
});
var client = new HttpClient(clientHandlerStub);
mockFactory.Setup(_ => _.CreateClient(It.IsAny<string>())).Returns(client);
IHttpClientFactory factory = mockFactory.Object;
var controller = new ValuesController(factory);
//Act
var result = await controller.Get();
//Assert
result.Should().NotBeNull();
var okResult = result as OkObjectResult;
var actual = (string) okResult.Value;
actual.Should().Be(expected);
}
原文:
我正在按照本指南模拟 IHttpClientFactory。
https://stackoverflow.com/a/54227679/3850405
为了让它工作,我需要以下行:
var configuration = new HttpConfiguration();
Visual Studios 修复是 Install package 'Microsoft.AspNet.WebApi.Core'。
这可行,代码运行良好,但我收到以下警告:
警告 NU1701 包“Microsoft.AspNet.WebApi.Core 5.2.7”是 使用 '.NETFramework,Version=v4.6.1, .NETFramework,版本=v4.6.2,.NETFramework,版本=v4.7, .NETFramework,版本=v4.7.1, .NETFramework,版本=v4.7.2, .NETFramework,Version=v4.8' 代替项目目标框架 'net5.0'。此软件包可能与您的项目不完全兼容。
我已尝试安装下面推荐的Microsoft.AspNetCore.Mvc.WebApiCompatShim,但它不起作用。
https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.WebApiCompatShim
https://stackoverflow.com/a/57279121/3850405
还有其他 NuGet 可以用来解决这个问题吗?
查看Microsoft.AspNet.WebApi.Core 的依赖关系,它仅依赖于Microsoft.AspNet.WebApi.Client,而Microsoft.AspNet.WebApi.Client 又使用.NETStandard 2.0。理想情况下,我不想创建一个针对.NET Standard 2.0 的新项目并将代码放在那里。我想使用.NET 5 项目。
https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Core/
https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/
https://docs.microsoft.com/en-us/dotnet/standard/net-standard
【问题讨论】:
-
我完全不明白为什么你需要使用
HttpConfiguration来模拟它。这是一种与 .NET Framework 的 ASP.NET MVC WEB API 相关的类型,您根本不需要在 .NET 5.0 应用程序中使用它。 -
@MartinCostello 如果您有更好的解决方案,我会全力以赴。
-
如果您只需要一个模拟
IHttpClientFactory并返回一个HttpClient,那么我只需使用 Moq 创建一个,或者您可以自己滚动。它只有一种方法,HttpClient CreateClient(string)。 docs.microsoft.com/en-us/dotnet/api/… -
@MartinCostello 我需要请求以返回预期结果,在示例中为
Hello World。 -
那么模拟 IHttpClientFactory__ 和 _HttpClient 还不够吗?在这种情况下,我将插入一个我自己为这类事情编写的库:github.com/justeat/…
标签: c# .net .net-5 system.web.http