@Nikita07

Как тестировать класс, который зависит от ILogger и IHttpClientFactory?

Всем привет, есть следующий код

public class RtbService : IRtbService
    {
        private readonly HttpClient _client;
        private readonly ILogger<RtbService> _logger;

        SelectingСounter selectingСounter = new SelectingСounter();

        public RtbService(IHttpClientFactory client, ILogger<RtbService> logger)
        {
            _client = client.CreateClient();
            _logger = logger;
        }

        public async Task<AuctionRequest?> ProcessBidRequest(BidRequestModel requestModel, string endpoint, string protocol, int Identification)
        {
           // Код метода
        }
    }


необходимо протестировать метод ProcessBidRequest(), как я понимаю надо создать объект класса RtbService, после чего выполнить метод и сравнить результаты с помощью Assert, но как создать собхект если в качестве пар-ов он принимает IHttpClientFactory и ILogger??
Или можно как нибудь это сделать с помощью мок-объектов?

Использую XUnit и Moq
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka Куратор тега C#
Токсичный шарпист
В качестве ILogger можно передать NullLogger
А в качестве IHttpClientFactory можно передать настояющую фабрику, либо замокать, чтобы она возвращала создавала HttpClient с кастомным HttpRequestHandler, который не отправляет настоящие запросы.

https://anthonygiretti.com/2018/09/06/how-to-unit-...
Ответ написан
Комментировать
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Да, с помощью Moq можно.
Для логгера:
var mockLogger = new Mock>();
конфигурировать не надо
для IHttpClientFactory посложнее. Нужно мокнуть IHttpHandler
и мокнуть IHttpClientFactory так чтобы метод CreateClient возвращал new HttpClient(httpHandlerMock.Object);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы