Тесты -. net ядро ​​3 - PullRequest
       20

Тесты -. net ядро ​​3

0 голосов
/ 29 января 2020

Я создаю Rest API в. net core 3 (мой первый). В этом API я сделал DLL, который я вызываю из некоторых методов API. Я хочу написать несколько тестов для этой библиотеки DLL, но у меня есть некоторые проблемы с внедрением зависимости и получением значений, установленных в API ConfigureServices. Моя главная проблема - получить HttpClient по имени с IHttpClientFactory.

Моя архитектура:

  • Project WebApi
  • Project dllApi
  • Project Тесты

Вот мои ConfigureServices:

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

Я пробовал другой метод (moq, Substitute, ...) и ближе всего я получил от своей цели следующий, но он не находит HttpClient по имени:

public void GetCredentials()
{
    var httpClientFactoryMock = Substitute.For<IHttpClientFactory>();
    var service = new dllClass(httpClientFactoryMock);
    var result = service.GetCredentials().Result;
}

Как мне написать этот тест?

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 29 января 2020

Как говорится в комментарии. Вы не издевались над методом 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, который вы хотите протестировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...