繁体   English   中英

使用Moq模拟TraceListener

[英]Mocking a TraceListener with Moq

为什么Moq Verify失败并出现“Moq.MockException:未在模拟上执行调用”?

var mock = new Mock<TraceListener>();
var ts = new TraceSource("traceSourceName", SourceLevels.Verbose);
ts.Listeners.Add(mock.Object);

var message = "the message";

ts.TraceEvent(TraceEventType.Verbose, 0, message);
ts.Flush();
mock.Verify(x => x.WriteLine(message));

我知道这个问题已经存在很久了,但答案如下......

当您通过TraceSource编写跟踪事件时,它会调用跟踪侦听器TraceEvent方法来执行跟踪 - 因此您需要验证对listener.TraceEvent的调用,而不是侦听器.WriteLine ...

var mock = new Mock<TraceListener>();
var ts = new TraceSource("traceSourceName", SourceLevels.Verbose);
ts.Listeners.Add(mock.Object);

var message = "the message";

ts.TraceEvent(TraceEventType.Verbose, 0, message);

mock.Verify(x => x.TraceEvent(It.IsAny<TraceEventCache>(), "traceSourceName", 
    TraceEventType.Verbose, 0, message), Times.Once(), "Expected a trace");

希望这有助于某人!

干杯,

摩根

测试表明必须调用WriteLine方法,但事实并非如此。 查看代码很可能是因为此测试暴露了TraceSource.TraceEventTraceSource.Flush方法中的错误。 仔细检查那些方法你应该好好去!

另外,请看这个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM