【发布时间】:2020-01-29 10:10:15
【问题描述】:
我正在 .net core 3(我的第一个)中创建一个 Rest API。在那个 API 中,我做了一个从一些 API 方法调用的 dll。 我想在那个 dll 上写一些测试,但是我在一些依赖注入和获取 API ConfigureServices 中设置的值方面遇到了一些问题。我的主要问题是使用 IHttpClientFactory 按名称获取 HttpClient。
我的架构是:
- WebApi 项目
- 项目 dllApi
- 项目测试
这是我的配置服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddHttpClient("csms", c =>
{
c.BaseAddress = Configuration.GetValue<Uri>("ExternalAPI:CSMS:Url");
});
services.AddSingleton(typeof(IdllClass), typeof(dllClass));
}
我在 dll 中的类
public class dllClass
{
private readonly IHttpClientFactory ClientFactory;
public dllClass(IHttpClientFactory clientFactory)
{
ClientFactory = clientFactory;
}
public async Task<Credentials> GetCredentials()
{
var request = new HttpRequestMessage(HttpMethod.Get, $"Security/GetCredentials");
using (var client = ClientFactory.CreateClient("csms"))
{
var response = await client.SendAsync(request);
}
return new Credentials();
}
}
我尝试了不同的方法(起订量、替代品、...),我从目标中得到的最接近的方法是下面的这个,但它没有按名称找到 HttpClient:
public void GetCredentials()
{
var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
var service = new dllClass(httpClientFactoryMock);
var result = service.GetCredentials().Result;
}
我应该如何编写该测试?
感谢您的帮助
【问题讨论】:
-
httpClientFactoryMock.CreateClient("csms").Returns(YourHttpClientForTests) -
@Fabio 谢谢你的回答,但你能更准确吗?
标签: c# .net-core dependency-injection .net-core-3.0