Модульное тестирование Custom MessageHandler - PullRequest
0 голосов
/ 13 июня 2018

У меня есть пользовательский обработчик, как показано ниже:

public class LoggingHandler : DelegatingHandler
{

    public LoggingHandler()
    {         
    }

    protected override async Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,
        CancellationToken cancellationToken)
    {

        var logger = new Logger(new something1(), param2, param3);

        logger.LogInformation(
            $"Incoming request: {request.Method} {request.RequestUri} );
         .
         .
         .
         .
        return httpResponse;
     }
}

Я знаком с Moq и могу написать сообщение с запросом и ответом и успешно подтвердить его.

Однако какВы можете видеть, что я инициализировал регистратор в методе SendAsync и записывал информацию о запросах, ответах и ​​ошибках.

Как я могу протестировать регистратор в этом рабочем процессе?.

1 Ответ

0 голосов
/ 13 июня 2018

Проблема будет заключаться в том, что из-за ручной инициализации регистратора его издеваться сложно.

В логгере должна быть введенная зависимость.

public class LoggingHandler : DelegatingHandler {
    private readonly ILogger logger;

    public LoggingHandler(ILogger logger) {
        this.logger = logger;
    }

    //...

Если инжекция невозможна, используйте метод виртуальной фабрики, который можно переопределить при тестировании.

public class LoggingHandler : DelegatingHandler {

    public LoggingHandler() {
    }

    protected virtual ILogger CreateLogger() {
        //...
    }

    protected override async Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,
        CancellationToken cancellationToken) {
        var logger = CreateLogger();

        logger.LogInformation(
            $"Incoming request: {request.Method} {request.RequestUri} );

        //....

        return httpResponse;
    }

    //...
...