Хотите обойти Microsoft.Practices.EnterpriseLibrary.Logging в тесте MOQ

Я хочу протестировать свой код, который зависит от регистрации в Microsoft, и я хочу, чтобы он издевался или проходил мимо. в этом методе я проверяю ввод.

ниже приведена ошибка "LogWriter не был установлен для статического класса Logger. Установите его, вызывая метод Logger.SetLogWriter". Мой код, как показано ниже.

public HttpResponseMessage Patch(long Id)
    {
        using (new Tracer(GetType().Namespace))
        {
            EnterpriseHeader entHeader = Request.GetEnterpriseHeaders();
            Request.LogApiRequestReceived(_logger, entHeader, GetType().Name);
            Request.VerifyIdFormat((ulong)CustomerId);
            _bussinessObject.PatchData(Id, entHeader);
            return Request.CreateResponse(HttpStatusCode.OK);
        }
    }

В методе Mocking я пишу код ниже. Ilogger - наш пользовательский регистратор, который я могу смоделировать, но "New Tracer(Gettype().NameSpace)" не умеет издеваться.

var     mocklogger = new Mock<ILogger>();      
var mockTracer = new Mock<ITracer>();

        mockTracer.Setup(x => x.Tracer(GetType().Namespace));

        var Controller = new Controller(mockBO.Object, mocklogger.Object);
        Controller.Request = AddHttpRequestForHeaders();

        var Results = Controller.GetById(1517, true, false);

теперь я хочу издеваться над Tracer в Moq.

Если я смоделирую вышеприведенный код в Moq, он выдаст мне ошибку, т. Е. "Дополнительная информация: недопустимая установка для не виртуального (переопределяемого в VB) члена: mock => mock.GetType()"

и мой код в Moq

var mockTracer = new Mock<Tracer>();

        mockTracer.Setup(x => x.GetType().Namespace);

Спасибо,

1 ответ

Иногда лучше не использовать макет для создания макета. Особенно синглтон-персоналу сложно издеваться. В этом случае вам, вероятно, следует просто настроить журнал, чтобы он ничего не делал. Этот вид двойного теста называется поддельным: https://www.martinfowler.com/bliki/TestDouble.html

См. Эту статью для создания поддельного LogWriter: https://martinwilley.com/net/code/entliblognoconfig.html

Другие вопросы по тегам