我正在寻找一些在 Asp.net core 应用程序的集成测试中模拟 Typed HttpClient 的想法。
假设我有一个带有注册的 Typed HttpClient 的服务集合,如下所示
var serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient<ITestApiClient, TestApiClient>();
var services = serviceCollection.BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)
和TestApiClient这样的定义
public class TestApiClient: ITestApiClient
{
    HttpClient _httpClient;
    public TestApiClient(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }
    public void MakeTestApiCall()
    {
        var response = _httpClient.GetAsync("https://reqres.in/api/users?page=2");
        response.Result.Content.ReadAsStringAsync().Result.Dump();
    }
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法,将模拟HttpClient实现注入到TestApiClient使用 ServiceCollection 中,而无需直接实例化TestApiClient。
类似于我们在下面的集成测试中如何用模拟的 Foo 实现替换真实的 Foo 实现。
var fooMock = new Mock<IFoo>();
services.AddSingleton(fooMock);
Run Code Online (Sandbox Code Playgroud)
请注意,我已经找到了一种使用 Moq 和RichardSzalay.MockHttp. 我的问题是如何替换 ServiceCollection 中类型化的 Httpclient(模拟 …