我希望能在Asp.net core应用程序的集成测试中模拟一个已定义的Typed HttpClient,并寻找一些想法。
假设我有一个服务集合,其中注册了一个已定义的Typed HttpClient,代码如下:
var serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient<ITestApiClient, TestApiClient>();
var services = serviceCollection.BuildServiceProvider();
还有像这样的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();
}
}
我希望找到一种方法,可以使用ServiceCollection将伪造的HttpClient
实现注入到TestApiClient
中,而不必直接实例化TestApiClient
。
类似于我们在集成测试中可以进行如下替换真正的Foo实现为伪造的Foo实现。
var fooMock = new Mock<IFoo>();
services.AddSingleton(fooMock);
请注意,我已经找到了一种使用Moq和类似于
RichardSzalay.MockHttp
的库来模拟HttpClient的方法。我的问题是如何替换ServiceCollection中的类型化Httpclient(是否可以模拟HttpClientFactory?)。