我想测试我的代码,这是依赖于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);
感谢,
记录器是一个静态类,这使得它很难嘲笑和单元测试的测试。将测试过程中的记录器抽象为可以被模拟的界面。根据您的代码提供更多的上下文。没有足够的信息能够给你提供一个很好的答案。 – Nkosi
我不能模拟“New Tracer(GetType()。NameSpace)”。请参阅上面的代码。谢谢 – yogs