2017-02-13 22 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是我们的自定义记录器,我可以嘲笑,但“新追踪器(盖特佩()。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); 

现在我想模拟示踪在Moq。

如果我在Moq的嘲笑obove代码它给我错误即“其他信息:无效设置在非虚拟(在VB重写)成员:模拟=> mock.GetType()”

和我的在Moq的代码是

var mockTracer = new Mock<Tracer>(); 

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

感谢,

+1

记录器是一个静态类,这使得它很难嘲笑和单元测试的测试。将测试过程中的记录器抽象为可以被模拟的界面。根据您的代码提供更多的上下文。没有足够的信息能够给你提供一个很好的答案。 – Nkosi

+0

我不能模拟“New Tracer(GetType()。NameSpace)”。请参阅上面的代码。谢谢 – yogs

回答