我想测试我的代码,这取决于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 Method中,我正在编写下面的代码。 Ilogger是我的自定义记录器,我可以模拟,但“新跟踪器(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);
现在我想在Moq中模仿Tracer。
如果我在Moq中模拟obove代码它会给我错误,即“附加信息:非虚拟(在VB中可覆盖)成员上的无效设置:mock =&gt; mock.GetType()”
我在Moq的代码是
var mockTracer = new Mock<Tracer>();
mockTracer.Setup(x => x.GetType().Namespace);
谢谢,
答案 0 :(得分:0)
有时最好不要使用模拟框架来创建模拟。特别是单身人员难以嘲笑。在这种情况下,您可能只需将日志配置为什么都不做。这种测试双重称为假:https://www.martinfowler.com/bliki/TestDouble.html
请参阅此文章以创建虚假的LogWriter:https://martinwilley.com/net/code/entliblognoconfig.html