测试 - .net 核心 3

Tests - .net core 3

我正在 .net core 3(我的第一个)中创建一个 Rest API。在那个 API 中,我做了一个从某些 API 方法调用的 dll。 我想在该 dll 上编写一些测试,但我在某些依赖项注入和获取 API ConfigureServices 中设置的值方面存在一些问题。我的主要问题是使用 IHttpClientFactory 按名称获取 HttpClient。

我的架构是:

这是我的配置服务:

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));
}

我的 class 在 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;
}

我应该如何编写该测试?

感谢您的帮助

如评论所述。您还没有嘲笑 CreateClient 方法。它应该类似于以下内容:

public void GetCredentials()
{
    var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
    var csmsTestClient = new HttpClient();
    httpClientFactoryMock.CreateClient("csms").Returns(csmsTestClient)
    var service = new dllClass(httpClientFactoryMock);
    var result = service.GetCredentials().Result;
}

然后您需要将 HttpClient 设置为指向您要测试的任何 url。