想跳过MOQ测试

时间:2017-02-13 09:40:05

标签: tdd moq mstest moq-3

我想测试我的代码,这取决于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);

谢谢,

1 个答案:

答案 0 :(得分:0)

有时最好不要使用模拟框架来创建模拟。特别是单身人员难以嘲笑。在这种情况下,您可能只需将日志配置为什么都不做。这种测试双重称为假:https://www.martinfowler.com/bliki/TestDouble.html

请参阅此文章以创建虚假的LogWriter:https://martinwilley.com/net/code/entliblognoconfig.html