2017-02-13 6 views
0

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

это дает мне ниже ошибку «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); 
     } 
    } 

В способе издевательства Я пишу ниже код. 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.

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

и мой код в Moq является

var mockTracer = new Mock<Tracer>(); 

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

Спасибо,

+1

Logger представляет собой статический класс, который затрудняет издеваться и тест в стандартных тестах. Выясните регистратор за интерфейсом, который можно высмеять во время тестов. Предоставьте больше контекста с точки зрения вашего кода. Недостаточно информации, чтобы предоставить вам хороший ответ. – Nkosi

+0

Я не могу издеваться над «New Tracer (GetType(). NameSpace)». см. приведенный выше код. благодаря – yogs

ответ

0

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

Смотрите эту статью, чтобы создать поддельный LogWriter: https://martinwilley.com/net/code/entliblognoconfig.html