0

我想测试我的代码,它依赖于 Microsoft 日志记录,我想模拟它或绕过它。在这种方法中,我正在验证输入。

它给了我以下错误“尚未为 Logger 静态类设置 LogWriter。设置它调用 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);

现在我想在 Moq 中模拟 Tracer。

如果我在 Moq 中模拟上述代码,它会给我错误,即“附加信息:非虚拟(在 VB 中可覆盖)成员上的设置无效:mock => mock.GetType()”

我在 Moq 中的代码是

var mockTracer = new Mock<Tracer>();

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

谢谢,

4

1 回答 1

0

有时最好不要使用模拟框架来创建模拟。尤其是单身员工很难嘲笑。在这种情况下,您可能应该只将日志配置为什么都不做。这种测试替身被称为假:https ://www.martinfowler.com/bliki/TestDouble.html

看这篇文章创建假LogWriter:https ://martinwilley.com/net/code/entliblognoconfig.html

于 2017-02-13T14:49:58.073 回答